/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

! function(t, e) {
	"object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ?
		define(["exports"], e) : e(t.echarts = {})
}(this, function(t) {
	"use strict";
	var e = 2311,
		n = function() {
			return e++
		},
		v = "object" == typeof wx && "function" == typeof wx.getSystemInfoSync ? {
			browser: {},
			os: {},
			node: !1,
			wxa: !0,
			canvasSupported: !0,
			svgSupported: !1,
			touchEventsSupported: !0,
			domSupported: !1
		} : "undefined" == typeof document && "undefined" != typeof self ? {
			browser: {},
			os: {},
			node: !1,
			worker: !0,
			canvasSupported: !0,
			domSupported: !1
		} : "undefined" == typeof navigator ? {
			browser: {},
			os: {},
			node: !0,
			worker: !1,
			canvasSupported: !0,
			svgSupported: !0,
			domSupported: !1
		} : function(t) {
			var e = {},
				i = t.match(/Firefox\/([\d.]+)/),
				n = t.match(/MSIE\s([\d.]+)/) || t.match(/Trident\/.+?rv:(([\d.]+))/),
				a = t.match(/Edge\/([\d.]+)/),
				o = /micromessenger/i.test(t);
			i && (e.firefox = !0, e.version = i[1]);
			n && (e.ie = !0, e.version = n[1]);
			a && (e.edge = !0, e.version = a[1]);
			o && (e.weChat = !0);
			return {
				browser: e,
				os: {},
				node: !1,
				canvasSupported: !!document.createElement("canvas").getContext,
				svgSupported: "undefined" != typeof SVGRect,
				touchEventsSupported: "ontouchstart" in window && !e.ie && !e.edge,
				pointerEventsSupported: "onpointerdown" in window && (e.edge || e.ie && 11 <= e.version),
				domSupported: "undefined" != typeof document
			}
		}(navigator.userAgent);
	var s = {
			"[object Function]": 1,
			"[object RegExp]": 1,
			"[object Date]": 1,
			"[object Error]": 1,
			"[object CanvasGradient]": 1,
			"[object CanvasPattern]": 1,
			"[object Image]": 1,
			"[object Canvas]": 1
		},
		l = {
			"[object Int8Array]": 1,
			"[object Uint8Array]": 1,
			"[object Uint8ClampedArray]": 1,
			"[object Int16Array]": 1,
			"[object Uint16Array]": 1,
			"[object Int32Array]": 1,
			"[object Uint32Array]": 1,
			"[object Float32Array]": 1,
			"[object Float64Array]": 1
		},
		u = Object.prototype.toString,
		i = Array.prototype,
		r = i.forEach,
		h = i.filter,
		a = i.slice,
		c = i.map,
		d = i.reduce,
		o = {};

	function f(t, e) {
		"createCanvas" === t && (y = null), o[t] = e
	}

	function D(t) {
		if (null == t || "object" != typeof t) return t;
		var e = t,
			i = u.call(t);
		if ("[object Array]" === i) {
			if (!$(t)) {
				e = [];
				for (var n = 0, a = t.length; n < a; n++) e[n] = D(t[n])
			}
		} else if (l[i]) {
			if (!$(t)) {
				var o = t.constructor;
				if (t.constructor.from) e = o.from(t);
				else {
					e = new o(t.length);
					for (n = 0, a = t.length; n < a; n++) e[n] = D(t[n])
				}
			}
		} else if (!s[i] && !$(t) && !G(t))
			for (var r in e = {}, t) t.hasOwnProperty(r) && (e[r] = D(t[r]));
		return e
	}

	function m(t, e, i) {
		if (!z(e) || !z(t)) return i ? D(e) : t;
		for (var n in e)
			if (e.hasOwnProperty(n)) {
				var a = t[n],
					o = e[n];
				!z(o) || !z(a) || k(o) || k(a) || G(o) || G(a) || B(o) || B(a) || $(o) || $(a) ? !i && n in t || (t[n] = D(e[n])) :
					m(a, o, i)
			}
		return t
	}

	function p(t, e) {
		for (var i = t[0], n = 1, a = t.length; n < a; n++) i = m(i, t[n], e);
		return i
	}

	function L(t, e) {
		for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i]);
		return t
	}

	function C(t, e, i) {
		for (var n in e) e.hasOwnProperty(n) && (i ? null != e[n] : null == t[n]) && (t[n] = e[n]);
		return t
	}

	function g() {
		return o.createCanvas()
	}
	var y;

	function x() {
		return y = y || g().getContext("2d")
	}

	function _(t, e) {
		if (t) {
			if (t.indexOf) return t.indexOf(e);
			for (var i = 0, n = t.length; i < n; i++)
				if (t[i] === e) return i
		}
		return -1
	}

	function w(t, e) {
		var i = t.prototype;

		function n() {}
		for (var a in n.prototype = e.prototype, t.prototype = new n, i) i.hasOwnProperty(a) && (t.prototype[a] = i[a]);
		(t.prototype.constructor = t).superClass = e
	}

	function b(t, e, i) {
		C(t = "prototype" in t ? t.prototype : t, e = "prototype" in e ? e.prototype : e, i)
	}

	function P(t) {
		if (t) return "string" != typeof t && "number" == typeof t.length
	}

	function E(t, e, i) {
		if (t && e)
			if (t.forEach && t.forEach === r) t.forEach(e, i);
			else if (t.length === +t.length)
			for (var n = 0, a = t.length; n < a; n++) e.call(i, t[n], n, t);
		else
			for (var o in t) t.hasOwnProperty(o) && e.call(i, t[o], o, t)
	}

	function N(t, e, i) {
		if (t && e) {
			if (t.map && t.map === c) return t.map(e, i);
			for (var n = [], a = 0, o = t.length; a < o; a++) n.push(e.call(i, t[a], a, t));
			return n
		}
	}

	function S(t, e, i, n) {
		if (t && e) {
			if (t.reduce && t.reduce === d) return t.reduce(e, i, n);
			for (var a = 0, o = t.length; a < o; a++) i = e.call(n, i, t[a], a, t);
			return i
		}
	}

	function M(t, e, i) {
		if (t && e) {
			if (t.filter && t.filter === h) return t.filter(e, i);
			for (var n = [], a = 0, o = t.length; a < o; a++) e.call(i, t[a], a, t) && n.push(t[a]);
			return n
		}
	}

	function I(t, e, i) {
		if (t && e)
			for (var n = 0, a = t.length; n < a; n++)
				if (e.call(i, t[n], n, t)) return t[n]
	}

	function T(t, e) {
		var i = a.call(arguments, 2);
		return function() {
			return t.apply(e, i.concat(a.call(arguments)))
		}
	}

	function A(t) {
		var e = a.call(arguments, 1);
		return function() {
			return t.apply(this, e.concat(a.call(arguments)))
		}
	}

	function k(t) {
		return "[object Array]" === u.call(t)
	}

	function O(t) {
		return "function" == typeof t
	}

	function R(t) {
		return "[object String]" === u.call(t)
	}

	function z(t) {
		var e = typeof t;
		return "function" == e || !!t && "object" == e
	}

	function B(t) {
		return !!s[u.call(t)]
	}

	function V(t) {
		return !!l[u.call(t)]
	}

	function G(t) {
		return "object" == typeof t && "number" == typeof t.nodeType && "object" == typeof t.ownerDocument
	}

	function F(t) {
		return t != t
	}

	function W(t) {
		for (var e = 0, i = arguments.length; e < i; e++)
			if (null != arguments[e]) return arguments[e]
	}

	function H(t, e) {
		return null != t ? t : e
	}

	function Z(t, e, i) {
		return null != t ? t : null != e ? e : i
	}

	function U() {
		return Function.call.apply(a, arguments)
	}

	function X(t) {
		if ("number" == typeof t) return [t, t, t, t];
		var e = t.length;
		return 2 === e ? [t[0], t[1], t[0], t[1]] : 3 === e ? [t[0], t[1], t[2], t[1]] : t
	}

	function Y(t, e) {
		if (!t) throw new Error(e)
	}

	function j(t) {
		return null == t ? null : "function" == typeof t.trim ? t.trim() : t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
			"")
	}
	o.createCanvas = function() {
		return document.createElement("canvas")
	};
	var q = "__ec_primitive__";

	function K(t) {
		t[q] = !0
	}

	function $(t) {
		return t[q]
	}

	function J(t) {
		var i = k(t);
		this.data = {};
		var n = this;

		function e(t, e) {
			i ? n.set(t, e) : n.set(e, t)
		}
		t instanceof J ? t.each(e) : t && E(t, e)
	}

	function Q(t) {
		return new J(t)
	}

	function tt(t, e) {
		for (var i = new t.constructor(t.length + e.length), n = 0; n < t.length; n++) i[n] = t[n];
		var a = t.length;
		for (n = 0; n < e.length; n++) i[n + a] = e[n];
		return i
	}

	function et() {}
	J.prototype = {
		constructor: J,
		get: function(t) {
			return this.data.hasOwnProperty(t) ? this.data[t] : null
		},
		set: function(t, e) {
			return this.data[t] = e
		},
		each: function(t, e) {
			for (var i in void 0 !== e && (t = T(t, e)), this.data) this.data.hasOwnProperty(i) && t(this.data[i], i)
		},
		removeKey: function(t) {
			delete this.data[t]
		}
	};
	var it = (Object.freeze || Object)({
			$override: f,
			clone: D,
			merge: m,
			mergeAll: p,
			extend: L,
			defaults: C,
			createCanvas: g,
			getContext: x,
			indexOf: _,
			inherits: w,
			mixin: b,
			isArrayLike: P,
			each: E,
			map: N,
			reduce: S,
			filter: M,
			find: I,
			bind: T,
			curry: A,
			isArray: k,
			isFunction: O,
			isString: R,
			isObject: z,
			isBuiltInObject: B,
			isTypedArray: V,
			isDom: G,
			eqNaN: F,
			retrieve: W,
			retrieve2: H,
			retrieve3: Z,
			slice: U,
			normalizeCssArray: X,
			assert: Y,
			trim: j,
			setAsPrimitive: K,
			isPrimitive: $,
			createHashMap: Q,
			concatArray: tt,
			noop: et
		}),
		nt = "undefined" == typeof Float32Array ? Array : Float32Array;

	function at(t, e) {
		var i = new nt(2);
		return null == t && (t = 0), null == e && (e = 0), i[0] = t, i[1] = e, i
	}

	function ot(t, e) {
		return t[0] = e[0], t[1] = e[1], t
	}

	function rt(t) {
		var e = new nt(2);
		return e[0] = t[0], e[1] = t[1], e
	}

	function st(t, e, i) {
		return t[0] = e, t[1] = i, t
	}

	function lt(t, e, i) {
		return t[0] = e[0] + i[0], t[1] = e[1] + i[1], t
	}

	function ut(t, e, i, n) {
		return t[0] = e[0] + i[0] * n, t[1] = e[1] + i[1] * n, t
	}

	function ht(t, e, i) {
		return t[0] = e[0] - i[0], t[1] = e[1] - i[1], t
	}

	function ct(t) {
		return Math.sqrt(ft(t))
	}
	var dt = ct;

	function ft(t) {
		return t[0] * t[0] + t[1] * t[1]
	}
	var pt = ft;

	function gt(t, e, i) {
		return t[0] = e[0] * i, t[1] = e[1] * i, t
	}

	function mt(t, e) {
		var i = ct(e);
		return 0 === i ? (t[0] = 0, t[1] = 0) : (t[0] = e[0] / i, t[1] = e[1] / i), t
	}

	function vt(t, e) {
		return Math.sqrt((t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1]))
	}
	var yt = vt;

	function xt(t, e) {
		return (t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1])
	}
	var _t = xt;

	function wt(t, e, i, n) {
		return t[0] = e[0] + n * (i[0] - e[0]), t[1] = e[1] + n * (i[1] - e[1]), t
	}

	function bt(t, e, i) {
		var n = e[0],
			a = e[1];
		return t[0] = i[0] * n + i[2] * a + i[4], t[1] = i[1] * n + i[3] * a + i[5], t
	}

	function St(t, e, i) {
		return t[0] = Math.min(e[0], i[0]), t[1] = Math.min(e[1], i[1]), t
	}

	function Mt(t, e, i) {
		return t[0] = Math.max(e[0], i[0]), t[1] = Math.max(e[1], i[1]), t
	}
	var It = (Object.freeze || Object)({
		create: at,
		copy: ot,
		clone: rt,
		set: st,
		add: lt,
		scaleAndAdd: ut,
		sub: ht,
		len: ct,
		length: dt,
		lenSquare: ft,
		lengthSquare: pt,
		mul: function(t, e, i) {
			return t[0] = e[0] * i[0], t[1] = e[1] * i[1], t
		},
		div: function(t, e, i) {
			return t[0] = e[0] / i[0], t[1] = e[1] / i[1], t
		},
		dot: function(t, e) {
			return t[0] * e[0] + t[1] * e[1]
		},
		scale: gt,
		normalize: mt,
		distance: vt,
		dist: yt,
		distanceSquare: xt,
		distSquare: _t,
		negate: function(t, e) {
			return t[0] = -e[0], t[1] = -e[1], t
		},
		lerp: wt,
		applyTransform: bt,
		min: St,
		max: Mt
	});

	function At() {
		this.on("mousedown", this._dragStart, this), this.on("mousemove", this._drag, this), this.on("mouseup", this._dragEnd,
			this), this.on("globalout", this._dragEnd, this)
	}

	function Tt(t, e) {
		return {
			target: t,
			topTarget: e && e.topTarget
		}
	}
	At.prototype = {
		constructor: At,
		_dragStart: function(t) {
			var e = t.target;
			e && e.draggable && ((this._draggingTarget = e).dragging = !0, this._x = t.offsetX, this._y = t.offsetY, this.dispatchToElement(
				Tt(e, t), "dragstart", t.event))
		},
		_drag: function(t) {
			var e = this._draggingTarget;
			if (e) {
				var i = t.offsetX,
					n = t.offsetY,
					a = i - this._x,
					o = n - this._y;
				this._x = i, this._y = n, e.drift(a, o, t), this.dispatchToElement(Tt(e, t), "drag", t.event);
				var r = this.findHover(i, n, e).target,
					s = this._dropTarget;
				e !== (this._dropTarget = r) && (s && r !== s && this.dispatchToElement(Tt(s, t), "dragleave", t.event), r && r !==
					s && this.dispatchToElement(Tt(r, t), "dragenter", t.event))
			}
		},
		_dragEnd: function(t) {
			var e = this._draggingTarget;
			e && (e.dragging = !1), this.dispatchToElement(Tt(e, t), "dragend", t.event), this._dropTarget && this.dispatchToElement(
				Tt(this._dropTarget, t), "drop", t.event), this._draggingTarget = null, this._dropTarget = null
		}
	};
	var Dt = Array.prototype.slice,
		Ct = function(t) {
			this._$handlers = {}, this._$eventProcessor = t
		};

	function Lt(t, e, i, n, a, o) {
		var r = t._$handlers;
		if ("function" == typeof i && (a = n, n = i, i = null), !n || !e) return t;
		i = function(t, e) {
			var i = t._$eventProcessor;
			return null != e && i && i.normalizeQuery && (e = i.normalizeQuery(e)), e
		}(t, i), r[e] || (r[e] = []);
		for (var s = 0; s < r[e].length; s++)
			if (r[e][s].h === n) return t;
		var l = {
				h: n,
				one: o,
				query: i,
				ctx: a || t,
				callAtLast: n.zrEventfulCallAtLast
			},
			u = r[e].length - 1,
			h = r[e][u];
		return h && h.callAtLast ? r[e].splice(u, 0, l) : r[e].push(l), t
	}
	Ct.prototype = {
		constructor: Ct,
		one: function(t, e, i, n) {
			return Lt(this, t, e, i, n, !0)
		},
		on: function(t, e, i, n) {
			return Lt(this, t, e, i, n, !1)
		},
		isSilent: function(t) {
			var e = this._$handlers;
			return !e[t] || !e[t].length
		},
		off: function(t, e) {
			var i = this._$handlers;
			if (!t) return this._$handlers = {}, this;
			if (e) {
				if (i[t]) {
					for (var n = [], a = 0, o = i[t].length; a < o; a++) i[t][a].h !== e && n.push(i[t][a]);
					i[t] = n
				}
				i[t] && 0 === i[t].length && delete i[t]
			} else delete i[t];
			return this
		},
		trigger: function(t) {
			var e = this._$handlers[t],
				i = this._$eventProcessor;
			if (e) {
				var n = arguments,
					a = n.length;
				3 < a && (n = Dt.call(n, 1));
				for (var o = e.length, r = 0; r < o;) {
					var s = e[r];
					if (i && i.filter && null != s.query && !i.filter(t, s.query)) r++;
					else {
						switch (a) {
							case 1:
								s.h.call(s.ctx);
								break;
							case 2:
								s.h.call(s.ctx, n[1]);
								break;
							case 3:
								s.h.call(s.ctx, n[1], n[2]);
								break;
							default:
								s.h.apply(s.ctx, n)
						}
						s.one ? (e.splice(r, 1), o--) : r++
					}
				}
			}
			return i && i.afterTrigger && i.afterTrigger(t), this
		},
		triggerWithContext: function(t) {
			var e = this._$handlers[t],
				i = this._$eventProcessor;
			if (e) {
				var n = arguments,
					a = n.length;
				4 < a && (n = Dt.call(n, 1, n.length - 1));
				for (var o = n[n.length - 1], r = e.length, s = 0; s < r;) {
					var l = e[s];
					if (i && i.filter && null != l.query && !i.filter(t, l.query)) s++;
					else {
						switch (a) {
							case 1:
								l.h.call(o);
								break;
							case 2:
								l.h.call(o, n[1]);
								break;
							case 3:
								l.h.call(o, n[1], n[2]);
								break;
							default:
								l.h.apply(o, n)
						}
						l.one ? (e.splice(s, 1), r--) : s++
					}
				}
			}
			return i && i.afterTrigger && i.afterTrigger(t), this
		}
	};
	var kt = Math.log(2);

	function Pt(t, e, i, n, a, o) {
		var r = n + "-" + a,
			s = t.length;
		if (o.hasOwnProperty(r)) return o[r];
		if (1 === e) {
			var l = Math.round(Math.log((1 << s) - 1 & ~a) / kt);
			return t[i][l]
		}
		for (var u = n | 1 << i, h = i + 1; n & 1 << h;) h++;
		for (var c = 0, d = 0, f = 0; d < s; d++) {
			var p = 1 << d;
			p & a || (c += (f % 2 ? -1 : 1) * t[i][d] * Pt(t, e - 1, h, u, a | p, o), f++)
		}
		return o[r] = c
	}
	var Nt = "undefined" != typeof window && !!window.addEventListener,
		Ot = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
		Et = "___zrEVENTSAVED",
		Rt = [];

	function zt(t, e, i, n) {
		return i = i || {}, n || !v.canvasSupported ? Bt(t, e, i) : v.browser.firefox && null != e.layerX && e.layerX !== e.offsetX ?
			(i.zrX = e.layerX, i.zrY = e.layerY) : null != e.offsetX ? (i.zrX = e.offsetX, i.zrY = e.offsetY) : Bt(t, e, i), i
	}

	function Bt(t, e, i) {
		if (t.getBoundingClientRect && v.domSupported) {
			var n = e.clientX,
				a = e.clientY;
			if ("CANVAS" === t.nodeName.toUpperCase()) {
				var o = t.getBoundingClientRect();
				return i.zrX = n - o.left, void(i.zrY = a - o.top)
			}
			var r = t[Et] || (t[Et] = {}),
				s = function(t, e) {
					for (var i = e.transformer, n = e.srcCoords, a = !0, o = [], r = [], s = 0; s < 4; s++) {
						var l = t[s].getBoundingClientRect(),
							u = 2 * s,
							h = l.left,
							c = l.top;
						o.push(h, c), a &= n && h === n[u] && c === n[1 + u], r.push(t[s].offsetLeft, t[s].offsetTop)
					}
					return a ? i : (e.srcCoords = o, e.transformer = function(t, e) {
						var i = [
								[t[0], t[1], 1, 0, 0, 0, -e[0] * t[0], -e[0] * t[1]],
								[0, 0, 0, t[0], t[1], 1, -e[1] * t[0], -e[1] * t[1]],
								[t[2], t[3], 1, 0, 0, 0, -e[2] * t[2], -e[2] * t[3]],
								[0, 0, 0, t[2], t[3], 1, -e[3] * t[2], -e[3] * t[3]],
								[t[4], t[5], 1, 0, 0, 0, -e[4] * t[4], -e[4] * t[5]],
								[0, 0, 0, t[4], t[5], 1, -e[5] * t[4], -e[5] * t[5]],
								[t[6], t[7], 1, 0, 0, 0, -e[6] * t[6], -e[6] * t[7]],
								[0, 0, 0, t[6], t[7], 1, -e[7] * t[6], -e[7] * t[7]]
							],
							n = {},
							a = Pt(i, 8, 0, 0, 0, n);
						if (0 !== a) {
							for (var o = [], r = 0; r < 8; r++)
								for (var s = 0; s < 8; s++) null == o[s] && (o[s] = 0), o[s] += ((r + s) % 2 ? -1 : 1) * Pt(i, 7, 0 === r ?
									1 : 0, 1 << r, 1 << s, n) / a * e[r];
							return function(t, e, i) {
								var n = e * o[6] + i * o[7] + 1;
								t[0] = (e * o[0] + i * o[1] + o[2]) / n, t[1] = (e * o[3] + i * o[4] + o[5]) / n
							}
						}
					}(o, r))
				}(function(t, e) {
					var i = e.markers;
					if (i) return i;
					i = e.markers = [];
					for (var n = ["left", "right"], a = ["top", "bottom"], o = 0; o < 4; o++) {
						var r = document.createElement("div"),
							s = r.style,
							l = o % 2,
							u = (o >> 1) % 2;
						s.cssText = ["position:absolute", "visibility: hidden", "padding: 0", "margin: 0", "border-width: 0", "width:0",
							"height:0", n[l] + ":0", a[u] + ":0", n[1 - l] + ":auto", a[1 - u] + ":auto", ""
						].join("!important;"), t.appendChild(r), i.push(r)
					}
					return i
				}(t, r), r);
			if (s) return s(Rt, n, a), i.zrX = Rt[0], void(i.zrY = Rt[1])
		}
		i.zrX = i.zrY = 0
	}

	function Vt(t, e, i) {
		if (null != (e = e || window.event).zrX) return e;
		var n = e.type;
		if (n && 0 <= n.indexOf("touch")) {
			var a = "touchend" !== n ? e.targetTouches[0] : e.changedTouches[0];
			a && zt(t, a, e, i)
		} else zt(t, e, e, i), e.zrDelta = e.wheelDelta ? e.wheelDelta / 120 : -(e.detail || 0) / 3;
		var o = e.button;
		return null == e.which && void 0 !== o && Ot.test(e.type) && (e.which = 1 & o ? 1 : 2 & o ? 3 : 4 & o ? 2 : 0), e
	}

	function Gt(t, e, i) {
		Nt ? t.addEventListener(e, i) : t.attachEvent("on" + e, i)
	}
	var Ft = Nt ? function(t) {
		t.preventDefault(), t.stopPropagation(), t.cancelBubble = !0
	} : function(t) {
		t.returnValue = !1, t.cancelBubble = !0
	};

	function Wt(t) {
		return 2 === t.which || 3 === t.which
	}

	function Ht() {
		this._track = []
	}

	function Zt(t) {
		var e = t[1][0] - t[0][0],
			i = t[1][1] - t[0][1];
		return Math.sqrt(e * e + i * i)
	}
	Ht.prototype = {
		constructor: Ht,
		recognize: function(t, e, i) {
			return this._doTrack(t, e, i), this._recognize(t)
		},
		clear: function() {
			return this._track.length = 0, this
		},
		_doTrack: function(t, e, i) {
			var n = t.touches;
			if (n) {
				for (var a = {
						points: [],
						touches: [],
						target: e,
						event: t
					}, o = 0, r = n.length; o < r; o++) {
					var s = n[o],
						l = zt(i, s, {});
					a.points.push([l.zrX, l.zrY]), a.touches.push(s)
				}
				this._track.push(a)
			}
		},
		_recognize: function(t) {
			for (var e in Ut)
				if (Ut.hasOwnProperty(e)) {
					var i = Ut[e](this._track, t);
					if (i) return i
				}
		}
	};
	var Ut = {
			pinch: function(t, e) {
				var i = t.length;
				if (i) {
					var n = (t[i - 1] || {}).points,
						a = (t[i - 2] || {}).points || n;
					if (a && 1 < a.length && n && 1 < n.length) {
						var o = Zt(n) / Zt(a);
						isFinite(o) || (o = 1), e.pinchScale = o;
						var r = function(t) {
							return [(t[0][0] + t[1][0]) / 2, (t[0][1] + t[1][1]) / 2]
						}(n);
						return e.pinchX = r[0], e.pinchY = r[1], {
							type: "pinch",
							target: t[0].target,
							event: e
						}
					}
				}
			}
		},
		Xt = "silent";

	function Yt(t) {
		Ft(this.event)
	}

	function jt() {}
	jt.prototype.dispose = function() {};

	function qt(t, e, i, n) {
		Ct.call(this), this.storage = t, this.painter = e, this.painterRoot = n, i = i || new jt, this.proxy = null, this._hovered = {},
			this._lastTouchMoment, this._lastX, this._lastY, this._gestureMgr, At.call(this), this.setHandlerProxy(i)
	}
	var Kt = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"];

	function $t(t, e, i) {
		if (t[t.rectHover ? "rectContain" : "contain"](e, i)) {
			for (var n, a = t; a;) {
				if (a.clipPath && !a.clipPath.contain(e, i)) return !1;
				a.silent && (n = !0), a = a.parent
			}
			return !n || Xt
		}
		return !1
	}
	qt.prototype = {
		constructor: qt,
		setHandlerProxy: function(e) {
			this.proxy && this.proxy.dispose(), e && (E(Kt, function(t) {
				e.on && e.on(t, this[t], this)
			}, this), e.handler = this), this.proxy = e
		},
		mousemove: function(t) {
			var e = t.zrX,
				i = t.zrY,
				n = this._hovered,
				a = n.target;
			a && !a.__zr && (a = (n = this.findHover(n.x, n.y)).target);
			var o = this._hovered = this.findHover(e, i),
				r = o.target,
				s = this.proxy;
			s.setCursor && s.setCursor(r ? r.cursor : "default"), a && r !== a && this.dispatchToElement(n, "mouseout", t),
				this.dispatchToElement(o, "mousemove", t), r && r !== a && this.dispatchToElement(o, "mouseover", t)
		},
		mouseout: function(t) {
			this.dispatchToElement(this._hovered, "mouseout", t);
			for (var e, i = t.toElement || t.relatedTarget;
				(i = i && i.parentNode) && 9 !== i.nodeType && !(e = i === this.painterRoot););
			e || this.trigger("globalout", {
				event: t
			})
		},
		resize: function(t) {
			this._hovered = {}
		},
		dispatch: function(t, e) {
			var i = this[t];
			i && i.call(this, e)
		},
		dispose: function() {
			this.proxy.dispose(), this.storage = this.proxy = this.painter = null
		},
		setCursorStyle: function(t) {
			var e = this.proxy;
			e.setCursor && e.setCursor(t)
		},
		dispatchToElement: function(t, e, i) {
			var n = (t = t || {}).target;
			if (!n || !n.silent) {
				for (var a = "on" + e, o = function(t, e, i) {
						return {
							type: t,
							event: i,
							target: e.target,
							topTarget: e.topTarget,
							cancelBubble: !1,
							offsetX: i.zrX,
							offsetY: i.zrY,
							gestureEvent: i.gestureEvent,
							pinchX: i.pinchX,
							pinchY: i.pinchY,
							pinchScale: i.pinchScale,
							wheelDelta: i.zrDelta,
							zrByTouch: i.zrByTouch,
							which: i.which,
							stop: Yt
						}
					}(e, t, i); n && (n[a] && (o.cancelBubble = n[a].call(n, o)), n.trigger(e, o), n = n.parent, !o.cancelBubble);)
				;
				o.cancelBubble || (this.trigger(e, o), this.painter && this.painter.eachOtherLayer(function(t) {
					"function" == typeof t[a] && t[a].call(t, o), t.trigger && t.trigger(e, o)
				}))
			}
		},
		findHover: function(t, e, i) {
			for (var n = this.storage.getDisplayList(), a = {
					x: t,
					y: e
				}, o = n.length - 1; 0 <= o; o--) {
				var r;
				if (n[o] !== i && !n[o].ignore && (r = $t(n[o], t, e)) && (a.topTarget || (a.topTarget = n[o]), r !== Xt)) {
					a.target = n[o];
					break
				}
			}
			return a
		},
		processGesture: function(t, e) {
			this._gestureMgr || (this._gestureMgr = new Ht);
			var i = this._gestureMgr;
			"start" === e && i.clear();
			var n = i.recognize(t, this.findHover(t.zrX, t.zrY, null).target, this.proxy.dom);
			if ("end" === e && i.clear(), n) {
				var a = n.type;
				t.gestureEvent = a, this.dispatchToElement({
					target: n.target
				}, a, n.event)
			}
		}
	}, E(["click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu"], function(n) {
		qt.prototype[n] = function(t) {
			var e = this.findHover(t.zrX, t.zrY),
				i = e.target;
			if ("mousedown" === n) this._downEl = i, this._downPoint = [t.zrX, t.zrY], this._upEl = i;
			else if ("mouseup" === n) this._upEl = i;
			else if ("click" === n) {
				if (this._downEl !== this._upEl || !this._downPoint || 4 < yt(this._downPoint, [t.zrX, t.zrY])) return;
				this._downPoint = null
			}
			this.dispatchToElement(e, n, t)
		}
	}), b(qt, Ct), b(qt, At);
	var Jt = "undefined" == typeof Float32Array ? Array : Float32Array;

	function Qt() {
		var t = new Jt(6);
		return te(t), t
	}

	function te(t) {
		return t[0] = 1, t[1] = 0, t[2] = 0, t[3] = 1, t[4] = 0, t[5] = 0, t
	}

	function ee(t, e) {
		return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4], t[5] = e[5], t
	}

	function ie(t, e, i) {
		var n = e[0] * i[0] + e[2] * i[1],
			a = e[1] * i[0] + e[3] * i[1],
			o = e[0] * i[2] + e[2] * i[3],
			r = e[1] * i[2] + e[3] * i[3],
			s = e[0] * i[4] + e[2] * i[5] + e[4],
			l = e[1] * i[4] + e[3] * i[5] + e[5];
		return t[0] = n, t[1] = a, t[2] = o, t[3] = r, t[4] = s, t[5] = l, t
	}

	function ne(t, e, i) {
		return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4] + i[0], t[5] = e[5] + i[1], t
	}

	function ae(t, e, i) {
		var n = e[0],
			a = e[2],
			o = e[4],
			r = e[1],
			s = e[3],
			l = e[5],
			u = Math.sin(i),
			h = Math.cos(i);
		return t[0] = n * h + r * u, t[1] = -n * u + r * h, t[2] = a * h + s * u, t[3] = -a * u + h * s, t[4] = h * o + u *
			l, t[5] = h * l - u * o, t
	}

	function oe(t, e, i) {
		var n = i[0],
			a = i[1];
		return t[0] = e[0] * n, t[1] = e[1] * a, t[2] = e[2] * n, t[3] = e[3] * a, t[4] = e[4] * n, t[5] = e[5] * a, t
	}

	function re(t, e) {
		var i = e[0],
			n = e[2],
			a = e[4],
			o = e[1],
			r = e[3],
			s = e[5],
			l = i * r - o * n;
		return l ? (l = 1 / l, t[0] = r * l, t[1] = -o * l, t[2] = -n * l, t[3] = i * l, t[4] = (n * s - r * a) * l, t[5] =
			(o * a - i * s) * l, t) : null
	}

	function se(t) {
		var e = Qt();
		return ee(e, t), e
	}
	var le = (Object.freeze || Object)({
			create: Qt,
			identity: te,
			copy: ee,
			mul: ie,
			translate: ne,
			rotate: ae,
			scale: oe,
			invert: re,
			clone: se
		}),
		ue = te;

	function he(t) {
		return 5e-5 < t || t < -5e-5
	}
	var ce = function(t) {
			(t = t || {}).position || (this.position = [0, 0]), null == t.rotation && (this.rotation = 0), t.scale || (this.scale = [
				1, 1
			]), this.origin = this.origin || null
		},
		de = ce.prototype;
	de.transform = null, de.needLocalTransform = function() {
		return he(this.rotation) || he(this.position[0]) || he(this.position[1]) || he(this.scale[0] - 1) || he(this.scale[
			1] - 1)
	};
	var fe = [];
	de.updateTransform = function() {
		var t = this.parent,
			e = t && t.transform,
			i = this.needLocalTransform(),
			n = this.transform;
		if (i || e) {
			n = n || Qt(), i ? this.getLocalTransform(n) : ue(n), e && (i ? ie(n, t.transform, n) : ee(n, t.transform)), this.transform =
				n;
			var a = this.globalScaleRatio;
			if (null != a && 1 !== a) {
				this.getGlobalScale(fe);
				var o = fe[0] < 0 ? -1 : 1,
					r = fe[1] < 0 ? -1 : 1,
					s = ((fe[0] - o) * a + o) / fe[0] || 0,
					l = ((fe[1] - r) * a + r) / fe[1] || 0;
				n[0] *= s, n[1] *= s, n[2] *= l, n[3] *= l
			}
			this.invTransform = this.invTransform || Qt(), re(this.invTransform, n)
		} else n && ue(n)
	}, de.getLocalTransform = function(t) {
		return ce.getLocalTransform(this, t)
	}, de.setTransform = function(t) {
		var e = this.transform,
			i = t.dpr || 1;
		e ? t.setTransform(i * e[0], i * e[1], i * e[2], i * e[3], i * e[4], i * e[5]) : t.setTransform(i, 0, 0, i, 0, 0)
	}, de.restoreTransform = function(t) {
		var e = t.dpr || 1;
		t.setTransform(e, 0, 0, e, 0, 0)
	};
	var pe = [],
		ge = Qt();
	de.setLocalTransform = function(t) {
		if (t) {
			var e = t[0] * t[0] + t[1] * t[1],
				i = t[2] * t[2] + t[3] * t[3],
				n = this.position,
				a = this.scale;
			he(e - 1) && (e = Math.sqrt(e)), he(i - 1) && (i = Math.sqrt(i)), t[0] < 0 && (e = -e), t[3] < 0 && (i = -i), n[0] =
				t[4], n[1] = t[5], a[0] = e, a[1] = i, this.rotation = Math.atan2(-t[1] / i, t[0] / e)
		}
	}, de.decomposeTransform = function() {
		if (this.transform) {
			var t = this.parent,
				e = this.transform;
			t && t.transform && (ie(pe, t.invTransform, e), e = pe);
			var i = this.origin;
			i && (i[0] || i[1]) && (ge[4] = i[0], ge[5] = i[1], ie(pe, e, ge), pe[4] -= i[0], pe[5] -= i[1], e = pe), this.setLocalTransform(
				e)
		}
	}, de.getGlobalScale = function(t) {
		var e = this.transform;
		return t = t || [], e ? (t[0] = Math.sqrt(e[0] * e[0] + e[1] * e[1]), t[1] = Math.sqrt(e[2] * e[2] + e[3] * e[3]),
			e[0] < 0 && (t[0] = -t[0]), e[3] < 0 && (t[1] = -t[1])) : (t[0] = 1, t[1] = 1), t
	}, de.transformCoordToLocal = function(t, e) {
		var i = [t, e],
			n = this.invTransform;
		return n && bt(i, i, n), i
	}, de.transformCoordToGlobal = function(t, e) {
		var i = [t, e],
			n = this.transform;
		return n && bt(i, i, n), i
	}, ce.getLocalTransform = function(t, e) {
		ue(e = e || []);
		var i = t.origin,
			n = t.scale || [1, 1],
			a = t.rotation || 0,
			o = t.position || [0, 0];
		return i && (e[4] -= i[0], e[5] -= i[1]), oe(e, e, n), a && ae(e, e, a), i && (e[4] += i[0], e[5] += i[1]), e[4] +=
			o[0], e[5] += o[1], e
	};
	var me = {
		linear: function(t) {
			return t
		},
		quadraticIn: function(t) {
			return t * t
		},
		quadraticOut: function(t) {
			return t * (2 - t)
		},
		quadraticInOut: function(t) {
			return (t *= 2) < 1 ? .5 * t * t : -.5 * (--t * (t - 2) - 1)
		},
		cubicIn: function(t) {
			return t * t * t
		},
		cubicOut: function(t) {
			return --t * t * t + 1
		},
		cubicInOut: function(t) {
			return (t *= 2) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2)
		},
		quarticIn: function(t) {
			return t * t * t * t
		},
		quarticOut: function(t) {
			return 1 - --t * t * t * t
		},
		quarticInOut: function(t) {
			return (t *= 2) < 1 ? .5 * t * t * t * t : -.5 * ((t -= 2) * t * t * t - 2)
		},
		quinticIn: function(t) {
			return t * t * t * t * t
		},
		quinticOut: function(t) {
			return --t * t * t * t * t + 1
		},
		quinticInOut: function(t) {
			return (t *= 2) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2)
		},
		sinusoidalIn: function(t) {
			return 1 - Math.cos(t * Math.PI / 2)
		},
		sinusoidalOut: function(t) {
			return Math.sin(t * Math.PI / 2)
		},
		sinusoidalInOut: function(t) {
			return .5 * (1 - Math.cos(Math.PI * t))
		},
		exponentialIn: function(t) {
			return 0 === t ? 0 : Math.pow(1024, t - 1)
		},
		exponentialOut: function(t) {
			return 1 === t ? 1 : 1 - Math.pow(2, -10 * t)
		},
		exponentialInOut: function(t) {
			return 0 === t ? 0 : 1 === t ? 1 : (t *= 2) < 1 ? .5 * Math.pow(1024, t - 1) : .5 * (2 - Math.pow(2, -10 * (t - 1)))
		},
		circularIn: function(t) {
			return 1 - Math.sqrt(1 - t * t)
		},
		circularOut: function(t) {
			return Math.sqrt(1 - --t * t)
		},
		circularInOut: function(t) {
			return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1)
		},
		elasticIn: function(t) {
			var e, i = .1;
			return 0 === t ? 0 : 1 === t ? 1 : (e = !i || i < 1 ? (i = 1, .1) : .4 * Math.asin(1 / i) / (2 * Math.PI), -i *
				Math.pow(2, 10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / .4))
		},
		elasticOut: function(t) {
			var e, i = .1;
			return 0 === t ? 0 : 1 === t ? 1 : (e = !i || i < 1 ? (i = 1, .1) : .4 * Math.asin(1 / i) / (2 * Math.PI), i *
				Math.pow(2, -10 * t) * Math.sin((t - e) * (2 * Math.PI) / .4) + 1)
		},
		elasticInOut: function(t) {
			var e, i = .1;
			return 0 === t ? 0 : 1 === t ? 1 : (e = !i || i < 1 ? (i = 1, .1) : .4 * Math.asin(1 / i) / (2 * Math.PI), (t *=
				2) < 1 ? i * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / .4) * -.5 : i * Math.pow(2, -10 *
				(t -= 1)) * Math.sin((t - e) * (2 * Math.PI) / .4) * .5 + 1)
		},
		backIn: function(t) {
			return t * t * (2.70158 * t - 1.70158)
		},
		backOut: function(t) {
			return --t * t * (2.70158 * t + 1.70158) + 1
		},
		backInOut: function(t) {
			var e = 2.5949095;
			return (t *= 2) < 1 ? t * t * ((1 + e) * t - e) * .5 : .5 * ((t -= 2) * t * ((1 + e) * t + e) + 2)
		},
		bounceIn: function(t) {
			return 1 - me.bounceOut(1 - t)
		},
		bounceOut: function(t) {
			return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ?
				7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375
		},
		bounceInOut: function(t) {
			return t < .5 ? .5 * me.bounceIn(2 * t) : .5 * me.bounceOut(2 * t - 1) + .5
		}
	};

	function ve(t) {
		this._target = t.target, this._life = t.life || 1e3, this._delay = t.delay || 0, this._initialized = !1, this.loop =
			null != t.loop && t.loop, this.gap = t.gap || 0, this.easing = t.easing || "Linear", this.onframe = t.onframe, this
			.ondestroy = t.ondestroy, this.onrestart = t.onrestart, this._pausedTime = 0, this._paused = !1
	}
	ve.prototype = {
		constructor: ve,
		step: function(t, e) {
			if (this._initialized || (this._startTime = t + this._delay, this._initialized = !0), this._paused) this._pausedTime +=
				e;
			else {
				var i = (t - this._startTime - this._pausedTime) / this._life;
				if (!(i < 0)) {
					i = Math.min(i, 1);
					var n = this.easing,
						a = "string" == typeof n ? me[n] : n,
						o = "function" == typeof a ? a(i) : i;
					return this.fire("frame", o), 1 === i ? this.loop ? (this.restart(t), "restart") : (this._needsRemove = !0,
						"destroy") : null
				}
			}
		},
		restart: function(t) {
			var e = (t - this._startTime - this._pausedTime) % this._life;
			this._startTime = t - e + this.gap, this._pausedTime = 0, this._needsRemove = !1
		},
		fire: function(t, e) {
			this[t = "on" + t] && this[t](this._target, e)
		},
		pause: function() {
			this._paused = !0
		},
		resume: function() {
			this._paused = !1
		}
	};

	function ye() {
		this.head = null, this.tail = null, this._len = 0
	}
	var xe = ye.prototype;
	xe.insert = function(t) {
		var e = new we(t);
		return this.insertEntry(e), e
	}, xe.insertEntry = function(t) {
		this.head ? ((this.tail.next = t).prev = this.tail, t.next = null, this.tail = t) : this.head = this.tail = t, this
			._len++
	}, xe.remove = function(t) {
		var e = t.prev,
			i = t.next;
		e ? e.next = i : this.head = i, i ? i.prev = e : this.tail = e, t.next = t.prev = null, this._len--
	}, xe.len = function() {
		return this._len
	}, xe.clear = function() {
		this.head = this.tail = null, this._len = 0
	};

	function _e(t) {
		this._list = new ye, this._map = {}, this._maxSize = t || 10, this._lastRemovedEntry = null
	}
	var we = function(t) {
			this.value = t, this.next, this.prev
		},
		be = _e.prototype;
	be.put = function(t, e) {
		var i = this._list,
			n = this._map,
			a = null;
		if (null == n[t]) {
			var o = i.len(),
				r = this._lastRemovedEntry;
			if (o >= this._maxSize && 0 < o) {
				var s = i.head;
				i.remove(s), delete n[s.key], a = s.value, this._lastRemovedEntry = s
			}
			r ? r.value = e : r = new we(e), r.key = t, i.insertEntry(r), n[t] = r
		}
		return a
	}, be.get = function(t) {
		var e = this._map[t],
			i = this._list;
		if (null != e) return e !== i.tail && (i.remove(e), i.insertEntry(e)), e.value
	}, be.clear = function() {
		this._list.clear(), this._map = {}
	};
	var Se = {
		transparent: [0, 0, 0, 0],
		aliceblue: [240, 248, 255, 1],
		antiquewhite: [250, 235, 215, 1],
		aqua: [0, 255, 255, 1],
		aquamarine: [127, 255, 212, 1],
		azure: [240, 255, 255, 1],
		beige: [245, 245, 220, 1],
		bisque: [255, 228, 196, 1],
		black: [0, 0, 0, 1],
		blanchedalmond: [255, 235, 205, 1],
		blue: [0, 0, 255, 1],
		blueviolet: [138, 43, 226, 1],
		brown: [165, 42, 42, 1],
		burlywood: [222, 184, 135, 1],
		cadetblue: [95, 158, 160, 1],
		chartreuse: [127, 255, 0, 1],
		chocolate: [210, 105, 30, 1],
		coral: [255, 127, 80, 1],
		cornflowerblue: [100, 149, 237, 1],
		cornsilk: [255, 248, 220, 1],
		crimson: [220, 20, 60, 1],
		cyan: [0, 255, 255, 1],
		darkblue: [0, 0, 139, 1],
		darkcyan: [0, 139, 139, 1],
		darkgoldenrod: [184, 134, 11, 1],
		darkgray: [169, 169, 169, 1],
		darkgreen: [0, 100, 0, 1],
		darkgrey: [169, 169, 169, 1],
		darkkhaki: [189, 183, 107, 1],
		darkmagenta: [139, 0, 139, 1],
		darkolivegreen: [85, 107, 47, 1],
		darkorange: [255, 140, 0, 1],
		darkorchid: [153, 50, 204, 1],
		darkred: [139, 0, 0, 1],
		darksalmon: [233, 150, 122, 1],
		darkseagreen: [143, 188, 143, 1],
		darkslateblue: [72, 61, 139, 1],
		darkslategray: [47, 79, 79, 1],
		darkslategrey: [47, 79, 79, 1],
		darkturquoise: [0, 206, 209, 1],
		darkviolet: [148, 0, 211, 1],
		deeppink: [255, 20, 147, 1],
		deepskyblue: [0, 191, 255, 1],
		dimgray: [105, 105, 105, 1],
		dimgrey: [105, 105, 105, 1],
		dodgerblue: [30, 144, 255, 1],
		firebrick: [178, 34, 34, 1],
		floralwhite: [255, 250, 240, 1],
		forestgreen: [34, 139, 34, 1],
		fuchsia: [255, 0, 255, 1],
		gainsboro: [220, 220, 220, 1],
		ghostwhite: [248, 248, 255, 1],
		gold: [255, 215, 0, 1],
		goldenrod: [218, 165, 32, 1],
		gray: [128, 128, 128, 1],
		green: [0, 128, 0, 1],
		greenyellow: [173, 255, 47, 1],
		grey: [128, 128, 128, 1],
		honeydew: [240, 255, 240, 1],
		hotpink: [255, 105, 180, 1],
		indianred: [205, 92, 92, 1],
		indigo: [75, 0, 130, 1],
		ivory: [255, 255, 240, 1],
		khaki: [240, 230, 140, 1],
		lavender: [230, 230, 250, 1],
		lavenderblush: [255, 240, 245, 1],
		lawngreen: [124, 252, 0, 1],
		lemonchiffon: [255, 250, 205, 1],
		lightblue: [173, 216, 230, 1],
		lightcoral: [240, 128, 128, 1],
		lightcyan: [224, 255, 255, 1],
		lightgoldenrodyellow: [250, 250, 210, 1],
		lightgray: [211, 211, 211, 1],
		lightgreen: [144, 238, 144, 1],
		lightgrey: [211, 211, 211, 1],
		lightpink: [255, 182, 193, 1],
		lightsalmon: [255, 160, 122, 1],
		lightseagreen: [32, 178, 170, 1],
		lightskyblue: [135, 206, 250, 1],
		lightslategray: [119, 136, 153, 1],
		lightslategrey: [119, 136, 153, 1],
		lightsteelblue: [176, 196, 222, 1],
		lightyellow: [255, 255, 224, 1],
		lime: [0, 255, 0, 1],
		limegreen: [50, 205, 50, 1],
		linen: [250, 240, 230, 1],
		magenta: [255, 0, 255, 1],
		maroon: [128, 0, 0, 1],
		mediumaquamarine: [102, 205, 170, 1],
		mediumblue: [0, 0, 205, 1],
		mediumorchid: [186, 85, 211, 1],
		mediumpurple: [147, 112, 219, 1],
		mediumseagreen: [60, 179, 113, 1],
		mediumslateblue: [123, 104, 238, 1],
		mediumspringgreen: [0, 250, 154, 1],
		mediumturquoise: [72, 209, 204, 1],
		mediumvioletred: [199, 21, 133, 1],
		midnightblue: [25, 25, 112, 1],
		mintcream: [245, 255, 250, 1],
		mistyrose: [255, 228, 225, 1],
		moccasin: [255, 228, 181, 1],
		navajowhite: [255, 222, 173, 1],
		navy: [0, 0, 128, 1],
		oldlace: [253, 245, 230, 1],
		olive: [128, 128, 0, 1],
		olivedrab: [107, 142, 35, 1],
		orange: [255, 165, 0, 1],
		orangered: [255, 69, 0, 1],
		orchid: [218, 112, 214, 1],
		palegoldenrod: [238, 232, 170, 1],
		palegreen: [152, 251, 152, 1],
		paleturquoise: [175, 238, 238, 1],
		palevioletred: [219, 112, 147, 1],
		papayawhip: [255, 239, 213, 1],
		peachpuff: [255, 218, 185, 1],
		peru: [205, 133, 63, 1],
		pink: [255, 192, 203, 1],
		plum: [221, 160, 221, 1],
		powderblue: [176, 224, 230, 1],
		purple: [128, 0, 128, 1],
		red: [255, 0, 0, 1],
		rosybrown: [188, 143, 143, 1],
		royalblue: [65, 105, 225, 1],
		saddlebrown: [139, 69, 19, 1],
		salmon: [250, 128, 114, 1],
		sandybrown: [244, 164, 96, 1],
		seagreen: [46, 139, 87, 1],
		seashell: [255, 245, 238, 1],
		sienna: [160, 82, 45, 1],
		silver: [192, 192, 192, 1],
		skyblue: [135, 206, 235, 1],
		slateblue: [106, 90, 205, 1],
		slategray: [112, 128, 144, 1],
		slategrey: [112, 128, 144, 1],
		snow: [255, 250, 250, 1],
		springgreen: [0, 255, 127, 1],
		steelblue: [70, 130, 180, 1],
		tan: [210, 180, 140, 1],
		teal: [0, 128, 128, 1],
		thistle: [216, 191, 216, 1],
		tomato: [255, 99, 71, 1],
		turquoise: [64, 224, 208, 1],
		violet: [238, 130, 238, 1],
		wheat: [245, 222, 179, 1],
		white: [255, 255, 255, 1],
		whitesmoke: [245, 245, 245, 1],
		yellow: [255, 255, 0, 1],
		yellowgreen: [154, 205, 50, 1]
	};

	function Me(t) {
		return (t = Math.round(t)) < 0 ? 0 : 255 < t ? 255 : t
	}

	function Ie(t) {
		return t < 0 ? 0 : 1 < t ? 1 : t
	}

	function Ae(t) {
		return t.length && "%" === t.charAt(t.length - 1) ? Me(parseFloat(t) / 100 * 255) : Me(parseInt(t, 10))
	}

	function Te(t) {
		return t.length && "%" === t.charAt(t.length - 1) ? Ie(parseFloat(t) / 100) : Ie(parseFloat(t))
	}

	function De(t, e, i) {
		return i < 0 ? i += 1 : 1 < i && (i -= 1), 6 * i < 1 ? t + (e - t) * i * 6 : 2 * i < 1 ? e : 3 * i < 2 ? t + (e - t) *
			(2 / 3 - i) * 6 : t
	}

	function Ce(t, e, i) {
		return t + (e - t) * i
	}

	function Le(t, e, i, n, a) {
		return t[0] = e, t[1] = i, t[2] = n, t[3] = a, t
	}

	function ke(t, e) {
		return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t
	}
	var Pe = new _e(20),
		Ne = null;

	function Oe(t, e) {
		Ne && ke(Ne, e), Ne = Pe.put(t, Ne || e.slice())
	}

	function Ee(t, e) {
		if (t) {
			e = e || [];
			var i = Pe.get(t);
			if (i) return ke(e, i);
			var n, a = (t += "").replace(/ /g, "").toLowerCase();
			if (a in Se) return ke(e, Se[a]), Oe(t, e), e;
			if ("#" === a.charAt(0)) return 4 === a.length ? 0 <= (n = parseInt(a.substr(1), 16)) && n <= 4095 ? (Le(e, (3840 &
				n) >> 4 | (3840 & n) >> 8, 240 & n | (240 & n) >> 4, 15 & n | (15 & n) << 4, 1), Oe(t, e), e) : void Le(e, 0, 0,
				0, 1) : 7 === a.length ? 0 <= (n = parseInt(a.substr(1), 16)) && n <= 16777215 ? (Le(e, (16711680 & n) >> 16, (
				65280 & n) >> 8, 255 & n, 1), Oe(t, e), e) : void Le(e, 0, 0, 0, 1) : void 0;
			var o = a.indexOf("("),
				r = a.indexOf(")");
			if (-1 !== o && r + 1 === a.length) {
				var s = a.substr(0, o),
					l = a.substr(o + 1, r - (o + 1)).split(","),
					u = 1;
				switch (s) {
					case "rgba":
						if (4 !== l.length) return void Le(e, 0, 0, 0, 1);
						u = Te(l.pop());
					case "rgb":
						return 3 !== l.length ? void Le(e, 0, 0, 0, 1) : (Le(e, Ae(l[0]), Ae(l[1]), Ae(l[2]), u), Oe(t, e), e);
					case "hsla":
						return 4 !== l.length ? void Le(e, 0, 0, 0, 1) : (l[3] = Te(l[3]), Re(l, e), Oe(t, e), e);
					case "hsl":
						return 3 !== l.length ? void Le(e, 0, 0, 0, 1) : (Re(l, e), Oe(t, e), e);
					default:
						return
				}
			}
			Le(e, 0, 0, 0, 1)
		}
	}

	function Re(t, e) {
		var i = (parseFloat(t[0]) % 360 + 360) % 360 / 360,
			n = Te(t[1]),
			a = Te(t[2]),
			o = a <= .5 ? a * (n + 1) : a + n - a * n,
			r = 2 * a - o;
		return Le(e = e || [], Me(255 * De(r, o, i + 1 / 3)), Me(255 * De(r, o, i)), Me(255 * De(r, o, i - 1 / 3)), 1), 4 ===
			t.length && (e[3] = t[3]), e
	}

	function ze(t, e) {
		var i = Ee(t);
		if (i) {
			for (var n = 0; n < 3; n++) i[n] = e < 0 ? i[n] * (1 - e) | 0 : (255 - i[n]) * e + i[n] | 0, 255 < i[n] ? i[n] =
				255 : t[n] < 0 && (i[n] = 0);
			return Ue(i, 4 === i.length ? "rgba" : "rgb")
		}
	}

	function Be(t) {
		var e = Ee(t);
		if (e) return ((1 << 24) + (e[0] << 16) + (e[1] << 8) + +e[2]).toString(16).slice(1)
	}

	function Ve(t, e, i) {
		if (e && e.length && 0 <= t && t <= 1) {
			i = i || [];
			var n = t * (e.length - 1),
				a = Math.floor(n),
				o = Math.ceil(n),
				r = e[a],
				s = e[o],
				l = n - a;
			return i[0] = Me(Ce(r[0], s[0], l)), i[1] = Me(Ce(r[1], s[1], l)), i[2] = Me(Ce(r[2], s[2], l)), i[3] = Ie(Ce(r[3],
				s[3], l)), i
		}
	}
	var Ge = Ve;

	function Fe(t, e, i) {
		if (e && e.length && 0 <= t && t <= 1) {
			var n = t * (e.length - 1),
				a = Math.floor(n),
				o = Math.ceil(n),
				r = Ee(e[a]),
				s = Ee(e[o]),
				l = n - a,
				u = Ue([Me(Ce(r[0], s[0], l)), Me(Ce(r[1], s[1], l)), Me(Ce(r[2], s[2], l)), Ie(Ce(r[3], s[3], l))], "rgba");
			return i ? {
				color: u,
				leftIndex: a,
				rightIndex: o,
				value: n
			} : u
		}
	}
	var We = Fe;

	function He(t, e, i, n) {
		if (t = Ee(t)) return t = function(t) {
			if (t) {
				var e, i, n = t[0] / 255,
					a = t[1] / 255,
					o = t[2] / 255,
					r = Math.min(n, a, o),
					s = Math.max(n, a, o),
					l = s - r,
					u = (s + r) / 2;
				if (0 == l) i = e = 0;
				else {
					i = u < .5 ? l / (s + r) : l / (2 - s - r);
					var h = ((s - n) / 6 + l / 2) / l,
						c = ((s - a) / 6 + l / 2) / l,
						d = ((s - o) / 6 + l / 2) / l;
					n === s ? e = d - c : a === s ? e = 1 / 3 + h - d : o === s && (e = 2 / 3 + c - h), e < 0 && (e += 1), 1 < e &&
						(e -= 1)
				}
				var f = [360 * e, i, u];
				return null != t[3] && f.push(t[3]), f
			}
		}(t), null != e && (t[0] = function(t) {
			return (t = Math.round(t)) < 0 ? 0 : 360 < t ? 360 : t
		}(e)), null != i && (t[1] = Te(i)), null != n && (t[2] = Te(n)), Ue(Re(t), "rgba")
	}

	function Ze(t, e) {
		if ((t = Ee(t)) && null != e) return t[3] = Ie(e), Ue(t, "rgba")
	}

	function Ue(t, e) {
		if (t && t.length) {
			var i = t[0] + "," + t[1] + "," + t[2];
			return "rgba" !== e && "hsva" !== e && "hsla" !== e || (i += "," + t[3]), e + "(" + i + ")"
		}
	}
	var Xe = (Object.freeze || Object)({
			parse: Ee,
			lift: ze,
			toHex: Be,
			fastLerp: Ve,
			fastMapToColor: Ge,
			lerp: Fe,
			mapToColor: We,
			modifyHSL: He,
			modifyAlpha: Ze,
			stringify: Ue
		}),
		Ye = Array.prototype.slice;

	function je(t, e) {
		return t[e]
	}

	function qe(t, e, i) {
		t[e] = i
	}

	function Ke(t, e, i) {
		return (e - t) * i + t
	}

	function $e(t, e, i) {
		return .5 < i ? e : t
	}

	function Je(t, e, i, n, a) {
		var o = t.length;
		if (1 === a)
			for (var r = 0; r < o; r++) n[r] = Ke(t[r], e[r], i);
		else {
			var s = o && t[0].length;
			for (r = 0; r < o; r++)
				for (var l = 0; l < s; l++) n[r][l] = Ke(t[r][l], e[r][l], i)
		}
	}

	function Qe(t, e, i) {
		var n = t.length,
			a = e.length;
		if (n !== a)
			if (a < n) t.length = a;
			else
				for (var o = n; o < a; o++) t.push(1 === i ? e[o] : Ye.call(e[o]));
		var r = t[0] && t[0].length;
		for (o = 0; o < t.length; o++)
			if (1 === i) isNaN(t[o]) && (t[o] = e[o]);
			else
				for (var s = 0; s < r; s++) isNaN(t[o][s]) && (t[o][s] = e[o][s])
	}

	function ti(t, e, i) {
		if (t === e) return !0;
		var n = t.length;
		if (n !== e.length) return !1;
		if (1 === i) {
			for (var a = 0; a < n; a++)
				if (t[a] !== e[a]) return !1
		} else {
			var o = t[0].length;
			for (a = 0; a < n; a++)
				for (var r = 0; r < o; r++)
					if (t[a][r] !== e[a][r]) return !1
		}
		return !0
	}

	function ei(t, e, i, n, a, o, r, s, l) {
		var u = t.length;
		if (1 === l)
			for (var h = 0; h < u; h++) s[h] = ii(t[h], e[h], i[h], n[h], a, o, r);
		else {
			var c = t[0].length;
			for (h = 0; h < u; h++)
				for (var d = 0; d < c; d++) s[h][d] = ii(t[h][d], e[h][d], i[h][d], n[h][d], a, o, r)
		}
	}

	function ii(t, e, i, n, a, o, r) {
		var s = .5 * (i - t),
			l = .5 * (n - e);
		return (2 * (e - i) + s + l) * r + (-3 * (e - i) - 2 * s - l) * o + s * a + e
	}

	function ni(t) {
		if (P(t)) {
			var e = t.length;
			if (P(t[0])) {
				for (var i = [], n = 0; n < e; n++) i.push(Ye.call(t[n]));
				return i
			}
			return Ye.call(t)
		}
		return t
	}

	function ai(t) {
		return t[0] = Math.floor(t[0]), t[1] = Math.floor(t[1]), t[2] = Math.floor(t[2]), "rgba(" + t.join(",") + ")"
	}

	function oi(t, e, i, n, o, a) {
		var r = t._getter,
			s = t._setter,
			l = "spline" === e,
			u = n.length;
		if (u) {
			var h, c = P(n[0].value),
				d = !1,
				f = !1,
				p = c ? function(t) {
					var e = t[t.length - 1].value;
					return P(e && e[0]) ? 2 : 1
				}(n) : 0;
			n.sort(function(t, e) {
				return t.time - e.time
			}), h = n[u - 1].time;
			for (var g = [], m = [], v = n[0].value, y = !0, x = 0; x < u; x++) {
				g.push(n[x].time / h);
				var _ = n[x].value;
				if (c && ti(_, v, p) || !c && _ === v || (y = !1), "string" == typeof(v = _)) {
					var w = Ee(_);
					w ? (_ = w, d = !0) : f = !0
				}
				m.push(_)
			}
			if (a || !y) {
				var b = m[u - 1];
				for (x = 0; x < u - 1; x++) c ? Qe(m[x], b, p) : !isNaN(m[x]) || isNaN(b) || f || d || (m[x] = b);
				c && Qe(r(t._target, o), b, p);
				var S, M, I, A, T, D = 0,
					C = 0;
				if (d) var L = [0, 0, 0, 0];
				var k = new ve({
					target: t._target,
					life: h,
					loop: t._loop,
					delay: t._delay,
					onframe: function(t, e) {
						var i;
						if (e < 0) i = 0;
						else if (e < C) {
							for (i = Math.min(D + 1, u - 1); 0 <= i && !(g[i] <= e); i--);
							i = Math.min(i, u - 2)
						} else {
							for (i = D; i < u && !(g[i] > e); i++);
							i = Math.min(i - 1, u - 2)
						}
						C = e;
						var n = g[(D = i) + 1] - g[i];
						if (0 != n)
							if (S = (e - g[i]) / n, l)
								if (I = m[i], M = m[0 === i ? i : i - 1], A = m[u - 2 < i ? u - 1 : i + 1], T = m[u - 3 < i ? u - 1 : i + 2],
									c) ei(M, I, A, T, S, S * S, S * S * S, r(t, o), p);
								else {
									if (d) a = ei(M, I, A, T, S, S * S, S * S * S, L, 1), a = ai(L);
									else {
										if (f) return $e(I, A, S);
										a = ii(M, I, A, T, S, S * S, S * S * S)
									}
									s(t, o, a)
								}
						else if (c) Je(m[i], m[i + 1], S, r(t, o), p);
						else {
							var a;
							if (d) Je(m[i], m[i + 1], S, L, 1), a = ai(L);
							else {
								if (f) return $e(m[i], m[i + 1], S);
								a = Ke(m[i], m[i + 1], S)
							}
							s(t, o, a)
						}
					},
					ondestroy: i
				});
				return e && "spline" !== e && (k.easing = e), k
			}
		}
	}

	function ri(t, e, i, n) {
		this._tracks = {}, this._target = t, this._loop = e || !1, this._getter = i || je, this._setter = n || qe, this._clipCount =
			0, this._delay = 0, this._doneList = [], this._onframeList = [], this._clipList = []
	}
	ri.prototype = {
		when: function(t, e) {
			var i = this._tracks;
			for (var n in e)
				if (e.hasOwnProperty(n)) {
					if (!i[n]) {
						i[n] = [];
						var a = this._getter(this._target, n);
						if (null == a) continue;
						0 !== t && i[n].push({
							time: 0,
							value: ni(a)
						})
					}
					i[n].push({
						time: t,
						value: e[n]
					})
				}
			return this
		},
		during: function(t) {
			return this._onframeList.push(t), this
		},
		pause: function() {
			for (var t = 0; t < this._clipList.length; t++) this._clipList[t].pause();
			this._paused = !0
		},
		resume: function() {
			for (var t = 0; t < this._clipList.length; t++) this._clipList[t].resume();
			this._paused = !1
		},
		isPaused: function() {
			return !!this._paused
		},
		_doneCallback: function() {
			this._tracks = {}, this._clipList.length = 0;
			for (var t = this._doneList, e = t.length, i = 0; i < e; i++) t[i].call(this)
		},
		start: function(t, e) {
			function i() {
				--o || a._doneCallback()
			}
			var n, a = this,
				o = 0;
			for (var r in this._tracks)
				if (this._tracks.hasOwnProperty(r)) {
					var s = oi(this, t, i, this._tracks[r], r, e);
					s && (this._clipList.push(s), o++, this.animation && this.animation.addClip(s), n = s)
				}
			if (n) {
				var l = n.onframe;
				n.onframe = function(t, e) {
					l(t, e);
					for (var i = 0; i < a._onframeList.length; i++) a._onframeList[i](t, e)
				}
			}
			return o || this._doneCallback(), this
		},
		stop: function(t) {
			for (var e = this._clipList, i = this.animation, n = 0; n < e.length; n++) {
				var a = e[n];
				t && a.onframe(this._target, 1), i && i.removeClip(a)
			}
			e.length = 0
		},
		delay: function(t) {
			return this._delay = t, this
		},
		done: function(t) {
			return t && this._doneList.push(t), this
		},
		getClips: function() {
			return this._clipList
		}
	};
	var si = 1;
	"undefined" != typeof window && (si = Math.max(window.devicePixelRatio || 1, 1));
	var li = si,
		ui = function() {};

	function hi() {
		this.animators = []
	}
	var ci = ui;

	function di(t, e, i, n, a, o, r, s) {
		R(n) ? (o = a, a = n, n = 0) : O(a) ? (o = a, a = "linear", n = 0) : O(n) ? (o = n, n = 0) : i = O(i) ? (o = i, 500) :
			i || 500, t.stopAnimation(),
			function t(e, i, n, a, o, r, s) {
				var l = {};
				var u = 0;
				for (var h in a) a.hasOwnProperty(h) && (null != n[h] ? z(a[h]) && !P(a[h]) ? t(e, i ? i + "." + h : h, n[h], a[h],
					o, r, s) : (s ? (l[h] = n[h], fi(e, i, h, a[h])) : l[h] = a[h], u++) : null == a[h] || s || fi(e, i, h, a[h]));
				0 < u && e.animate(i, !1).when(null == o ? 500 : o, l).delay(r || 0)
			}(t, "", t, e, i, n, s);
		var l = t.animators.slice(),
			u = l.length;

		function h() {
			--u || o && o()
		}
		u || o && o();
		for (var c = 0; c < l.length; c++) l[c].done(h).start(a, r)
	}

	function fi(t, e, i, n) {
		if (e) {
			var a = {};
			a[e] = {}, a[e][i] = n, t.attr(a)
		} else t.attr(i, n)
	}
	hi.prototype = {
		constructor: hi,
		animate: function(t, e) {
			var i, n = !1,
				a = this,
				o = this.__zr;
			if (t) {
				var r = t.split("."),
					s = a;
				n = "shape" === r[0];
				for (var l = 0, u = r.length; l < u; l++) s = s && s[r[l]];
				s && (i = s)
			} else i = a;
			if (i) {
				var h = a.animators,
					c = new ri(i, e);
				return c.during(function(t) {
					a.dirty(n)
				}).done(function() {
					h.splice(_(h, c), 1)
				}), h.push(c), o && o.animation.addAnimator(c), c
			}
			ci('Property "' + t + '" is not existed in element ' + a.id)
		},
		stopAnimation: function(t) {
			for (var e = this.animators, i = e.length, n = 0; n < i; n++) e[n].stop(t);
			return e.length = 0, this
		},
		animateTo: function(t, e, i, n, a, o) {
			di(this, t, e, i, n, a, o)
		},
		animateFrom: function(t, e, i, n, a, o) {
			di(this, t, e, i, n, a, o, !0)
		}
	};
	var pi = function(t) {
		ce.call(this, t), Ct.call(this, t), hi.call(this, t), this.id = t.id || n()
	};
	pi.prototype = {
		type: "element",
		name: "",
		__zr: null,
		ignore: !1,
		clipPath: null,
		isGroup: !1,
		drift: function(t, e) {
			switch (this.draggable) {
				case "horizontal":
					e = 0;
					break;
				case "vertical":
					t = 0
			}
			var i = this.transform;
			(i = i || (this.transform = [1, 0, 0, 1, 0, 0]))[4] += t, i[5] += e, this.decomposeTransform(), this.dirty(!1)
		},
		beforeUpdate: function() {},
		afterUpdate: function() {},
		update: function() {
			this.updateTransform()
		},
		traverse: function(t, e) {},
		attrKV: function(t, e) {
			if ("position" === t || "scale" === t || "origin" === t) {
				if (e) {
					var i = this[t];
					(i = i || (this[t] = []))[0] = e[0], i[1] = e[1]
				}
			} else this[t] = e
		},
		hide: function() {
			this.ignore = !0, this.__zr && this.__zr.refresh()
		},
		show: function() {
			this.ignore = !1, this.__zr && this.__zr.refresh()
		},
		attr: function(t, e) {
			if ("string" == typeof t) this.attrKV(t, e);
			else if (z(t))
				for (var i in t) t.hasOwnProperty(i) && this.attrKV(i, t[i]);
			return this.dirty(!1), this
		},
		setClipPath: function(t) {
			var e = this.__zr;
			e && t.addSelfToZr(e), this.clipPath && this.clipPath !== t && this.removeClipPath(), (this.clipPath = t).__zr =
				e, (t.__clipTarget = this).dirty(!1)
		},
		removeClipPath: function() {
			var t = this.clipPath;
			t && (t.__zr && t.removeSelfFromZr(t.__zr), t.__zr = null, t.__clipTarget = null, this.clipPath = null, this.dirty(
				!1))
		},
		addSelfToZr: function(t) {
			this.__zr = t;
			var e = this.animators;
			if (e)
				for (var i = 0; i < e.length; i++) t.animation.addAnimator(e[i]);
			this.clipPath && this.clipPath.addSelfToZr(t)
		},
		removeSelfFromZr: function(t) {
			this.__zr = null;
			var e = this.animators;
			if (e)
				for (var i = 0; i < e.length; i++) t.animation.removeAnimator(e[i]);
			this.clipPath && this.clipPath.removeSelfFromZr(t)
		}
	}, b(pi, hi), b(pi, ce), b(pi, Ct);
	var gi, mi, vi, yi, xi = bt,
		_i = Math.min,
		wi = Math.max;

	function bi(t, e, i, n) {
		i < 0 && (t += i, i = -i), n < 0 && (e += n, n = -n), this.x = t, this.y = e, this.width = i, this.height = n
	}
	bi.prototype = {
		constructor: bi,
		union: function(t) {
			var e = _i(t.x, this.x),
				i = _i(t.y, this.y);
			this.width = wi(t.x + t.width, this.x + this.width) - e, this.height = wi(t.y + t.height, this.y + this.height) -
				i, this.x = e, this.y = i
		},
		applyTransform: (gi = [], mi = [], vi = [], yi = [], function(t) {
			if (t) {
				gi[0] = vi[0] = this.x, gi[1] = yi[1] = this.y, mi[0] = yi[0] = this.x + this.width, mi[1] = vi[1] = this.y +
					this.height, xi(gi, gi, t), xi(mi, mi, t), xi(vi, vi, t), xi(yi, yi, t), this.x = _i(gi[0], mi[0], vi[0], yi[0]),
					this.y = _i(gi[1], mi[1], vi[1], yi[1]);
				var e = wi(gi[0], mi[0], vi[0], yi[0]),
					i = wi(gi[1], mi[1], vi[1], yi[1]);
				this.width = e - this.x, this.height = i - this.y
			}
		}),
		calculateTransform: function(t) {
			var e = t.width / this.width,
				i = t.height / this.height,
				n = Qt();
			return ne(n, n, [-this.x, -this.y]), oe(n, n, [e, i]), ne(n, n, [t.x, t.y]), n
		},
		intersect: function(t) {
			if (!t) return !1;
			t instanceof bi || (t = bi.create(t));
			var e = this,
				i = e.x,
				n = e.x + e.width,
				a = e.y,
				o = e.y + e.height,
				r = t.x,
				s = t.x + t.width,
				l = t.y,
				u = t.y + t.height;
			return !(n < r || s < i || o < l || u < a)
		},
		contain: function(t, e) {
			var i = this;
			return t >= i.x && t <= i.x + i.width && e >= i.y && e <= i.y + i.height
		},
		clone: function() {
			return new bi(this.x, this.y, this.width, this.height)
		},
		copy: function(t) {
			this.x = t.x, this.y = t.y, this.width = t.width, this.height = t.height
		},
		plain: function() {
			return {
				x: this.x,
				y: this.y,
				width: this.width,
				height: this.height
			}
		}
	}, bi.create = function(t) {
		return new bi(t.x, t.y, t.width, t.height)
	};
	var Si = function(t) {
		for (var e in t = t || {}, pi.call(this, t), t) t.hasOwnProperty(e) && (this[e] = t[e]);
		this._children = [], this.__storage = null, this.__dirty = !0
	};
	Si.prototype = {
		constructor: Si,
		isGroup: !0,
		type: "group",
		silent: !1,
		children: function() {
			return this._children.slice()
		},
		childAt: function(t) {
			return this._children[t]
		},
		childOfName: function(t) {
			for (var e = this._children, i = 0; i < e.length; i++)
				if (e[i].name === t) return e[i]
		},
		childCount: function() {
			return this._children.length
		},
		add: function(t) {
			return t && t !== this && t.parent !== this && (this._children.push(t), this._doAdd(t)), this
		},
		addBefore: function(t, e) {
			if (t && t !== this && t.parent !== this && e && e.parent === this) {
				var i = this._children,
					n = i.indexOf(e);
				0 <= n && (i.splice(n, 0, t), this._doAdd(t))
			}
			return this
		},
		_doAdd: function(t) {
			t.parent && t.parent.remove(t);
			var e = (t.parent = this).__storage,
				i = this.__zr;
			e && e !== t.__storage && (e.addToStorage(t), t instanceof Si && t.addChildrenToStorage(e)), i && i.refresh()
		},
		remove: function(t) {
			var e = this.__zr,
				i = this.__storage,
				n = this._children,
				a = _(n, t);
			return a < 0 || (n.splice(a, 1), t.parent = null, i && (i.delFromStorage(t), t instanceof Si && t.delChildrenFromStorage(
				i)), e && e.refresh()), this
		},
		removeAll: function() {
			var t, e, i = this._children,
				n = this.__storage;
			for (e = 0; e < i.length; e++) t = i[e], n && (n.delFromStorage(t), t instanceof Si && t.delChildrenFromStorage(n)),
				t.parent = null;
			return i.length = 0, this
		},
		eachChild: function(t, e) {
			for (var i = this._children, n = 0; n < i.length; n++) {
				var a = i[n];
				t.call(e, a, n)
			}
			return this
		},
		traverse: function(t, e) {
			for (var i = 0; i < this._children.length; i++) {
				var n = this._children[i];
				t.call(e, n), "group" === n.type && n.traverse(t, e)
			}
			return this
		},
		addChildrenToStorage: function(t) {
			for (var e = 0; e < this._children.length; e++) {
				var i = this._children[e];
				t.addToStorage(i), i instanceof Si && i.addChildrenToStorage(t)
			}
		},
		delChildrenFromStorage: function(t) {
			for (var e = 0; e < this._children.length; e++) {
				var i = this._children[e];
				t.delFromStorage(i), i instanceof Si && i.delChildrenFromStorage(t)
			}
		},
		dirty: function() {
			return this.__dirty = !0, this.__zr && this.__zr.refresh(), this
		},
		getBoundingRect: function(t) {
			for (var e = null, i = new bi(0, 0, 0, 0), n = t || this._children, a = [], o = 0; o < n.length; o++) {
				var r = n[o];
				if (!r.ignore && !r.invisible) {
					var s = r.getBoundingRect(),
						l = r.getLocalTransform(a);
					l ? (i.copy(s), i.applyTransform(l), (e = e || i.clone()).union(i)) : (e = e || s.clone()).union(s)
				}
			}
			return e || i
		}
	}, w(Si, pi);
	var Mi = 32,
		Ii = 7;

	function Ai(t, e, i, n) {
		var a = e + 1;
		if (a === i) return 1;
		if (n(t[a++], t[e]) < 0) {
			for (; a < i && n(t[a], t[a - 1]) < 0;) a++;
			! function(t, e, i) {
				i--;
				for (; e < i;) {
					var n = t[e];
					t[e++] = t[i], t[i--] = n
				}
			}(t, e, a)
		} else
			for (; a < i && 0 <= n(t[a], t[a - 1]);) a++;
		return a - e
	}

	function Ti(t, e, i, n, a) {
		for (n === e && n++; n < i; n++) {
			for (var o, r = t[n], s = e, l = n; s < l;) a(r, t[o = s + l >>> 1]) < 0 ? l = o : s = 1 + o;
			var u = n - s;
			switch (u) {
				case 3:
					t[s + 3] = t[s + 2];
				case 2:
					t[s + 2] = t[s + 1];
				case 1:
					t[s + 1] = t[s];
					break;
				default:
					for (; 0 < u;) t[s + u] = t[s + u - 1], u--
			}
			t[s] = r
		}
	}

	function Di(t, e, i, n, a, o) {
		var r = 0,
			s = 0,
			l = 1;
		if (0 < o(t, e[i + a])) {
			for (s = n - a; l < s && 0 < o(t, e[i + a + l]);)(l = 1 + ((r = l) << 1)) <= 0 && (l = s);
			s < l && (l = s), r += a, l += a
		} else {
			for (s = a + 1; l < s && o(t, e[i + a - l]) <= 0;)(l = 1 + ((r = l) << 1)) <= 0 && (l = s);
			s < l && (l = s);
			var u = r;
			r = a - l, l = a - u
		}
		for (r++; r < l;) {
			var h = r + (l - r >>> 1);
			0 < o(t, e[i + h]) ? r = h + 1 : l = h
		}
		return l
	}

	function Ci(t, e, i, n, a, o) {
		var r = 0,
			s = 0,
			l = 1;
		if (o(t, e[i + a]) < 0) {
			for (s = a + 1; l < s && o(t, e[i + a - l]) < 0;)(l = 1 + ((r = l) << 1)) <= 0 && (l = s);
			s < l && (l = s);
			var u = r;
			r = a - l, l = a - u
		} else {
			for (s = n - a; l < s && 0 <= o(t, e[i + a + l]);)(l = 1 + ((r = l) << 1)) <= 0 && (l = s);
			s < l && (l = s), r += a, l += a
		}
		for (r++; r < l;) {
			var h = r + (l - r >>> 1);
			o(t, e[i + h]) < 0 ? l = h : r = h + 1
		}
		return l
	}

	function Li(p, g) {
		var r, s, m = Ii,
			l = 0,
			v = [];

		function e(t) {
			var e = r[t],
				i = s[t],
				n = r[t + 1],
				a = s[t + 1];
			s[t] = i + a, t === l - 3 && (r[t + 1] = r[t + 2], s[t + 1] = s[t + 2]), l--;
			var o = Ci(p[n], p, e, i, 0, g);
			e += o, 0 !== (i -= o) && 0 !== (a = Di(p[e + i - 1], p, n, a, a - 1, g)) && (i <= a ? function(t, e, i, n) {
				var a = 0;
				for (a = 0; a < e; a++) v[a] = p[t + a];
				var o = 0,
					r = i,
					s = t;
				if (p[s++] = p[r++], 0 == --n) {
					for (a = 0; a < e; a++) p[s + a] = v[o + a];
					return
				}
				if (1 === e) {
					for (a = 0; a < n; a++) p[s + a] = p[r + a];
					return p[s + n] = v[o]
				}
				var l, u, h, c = m;
				for (;;) {
					u = l = 0, h = !1;
					do {
						if (g(p[r], v[o]) < 0) {
							if (p[s++] = p[r++], u++, (l = 0) == --n) {
								h = !0;
								break
							}
						} else if (p[s++] = v[o++], l++, u = 0, 1 == --e) {
							h = !0;
							break
						}
					} while ((l | u) < c);
					if (h) break;
					do {
						if (0 !== (l = Ci(p[r], v, o, e, 0, g))) {
							for (a = 0; a < l; a++) p[s + a] = v[o + a];
							if (s += l, o += l, (e -= l) <= 1) {
								h = !0;
								break
							}
						}
						if (p[s++] = p[r++], 0 == --n) {
							h = !0;
							break
						}
						if (0 !== (u = Di(v[o], p, r, n, 0, g))) {
							for (a = 0; a < u; a++) p[s + a] = p[r + a];
							if (s += u, r += u, 0 === (n -= u)) {
								h = !0;
								break
							}
						}
						if (p[s++] = v[o++], 1 == --e) {
							h = !0;
							break
						}
						c--
					} while (Ii <= l || Ii <= u);
					if (h) break;
					c < 0 && (c = 0), c += 2
				}
				if ((m = c) < 1 && (m = 1), 1 === e) {
					for (a = 0; a < n; a++) p[s + a] = p[r + a];
					p[s + n] = v[o]
				} else {
					if (0 === e) throw new Error;
					for (a = 0; a < e; a++) p[s + a] = v[o + a]
				}
			}(e, i, n, a) : function(t, e, i, n) {
				var a = 0;
				for (a = 0; a < n; a++) v[a] = p[i + a];
				var o = t + e - 1,
					r = n - 1,
					s = i + n - 1,
					l = 0,
					u = 0;
				if (p[s--] = p[o--], 0 == --e) {
					for (l = s - (n - 1), a = 0; a < n; a++) p[l + a] = v[a];
					return
				}
				if (1 === n) {
					for (u = (s -= e) + 1, l = (o -= e) + 1, a = e - 1; 0 <= a; a--) p[u + a] = p[l + a];
					return p[s] = v[r]
				}
				var h = m;
				for (;;) {
					var c = 0,
						d = 0,
						f = !1;
					do {
						if (g(v[r], p[o]) < 0) {
							if (p[s--] = p[o--], c++, (d = 0) == --e) {
								f = !0;
								break
							}
						} else if (p[s--] = v[r--], d++, c = 0, 1 == --n) {
							f = !0;
							break
						}
					} while ((c | d) < h);
					if (f) break;
					do {
						if (0 !== (c = e - Ci(v[r], p, t, e, e - 1, g))) {
							for (e -= c, u = (s -= c) + 1, l = (o -= c) + 1, a = c - 1; 0 <= a; a--) p[u + a] = p[l + a];
							if (0 === e) {
								f = !0;
								break
							}
						}
						if (p[s--] = v[r--], 1 == --n) {
							f = !0;
							break
						}
						if (0 !== (d = n - Di(p[o], v, 0, n, n - 1, g))) {
							for (n -= d, u = (s -= d) + 1, l = (r -= d) + 1, a = 0; a < d; a++) p[u + a] = v[l + a];
							if (n <= 1) {
								f = !0;
								break
							}
						}
						if (p[s--] = p[o--], 0 == --e) {
							f = !0;
							break
						}
						h--
					} while (Ii <= c || Ii <= d);
					if (f) break;
					h < 0 && (h = 0), h += 2
				}(m = h) < 1 && (m = 1);
				if (1 === n) {
					for (u = (s -= e) + 1, l = (o -= e) + 1, a = e - 1; 0 <= a; a--) p[u + a] = p[l + a];
					p[s] = v[r]
				} else {
					if (0 === n) throw new Error;
					for (l = s - (n - 1), a = 0; a < n; a++) p[l + a] = v[a]
				}
			}(e, i, n, a))
		}
		r = [], s = [], this.mergeRuns = function() {
			for (; 1 < l;) {
				var t = l - 2;
				if (1 <= t && s[t - 1] <= s[t] + s[t + 1] || 2 <= t && s[t - 2] <= s[t] + s[t - 1]) s[t - 1] < s[t + 1] && t--;
				else if (s[t] > s[t + 1]) break;
				e(t)
			}
		}, this.forceMergeRuns = function() {
			for (; 1 < l;) {
				var t = l - 2;
				0 < t && s[t - 1] < s[t + 1] && t--, e(t)
			}
		}, this.pushRun = function(t, e) {
			r[l] = t, s[l] = e, l += 1
		}
	}

	function ki(t, e, i, n) {
		i = i || 0;
		var a = (n = n || t.length) - i;
		if (!(a < 2)) {
			var o = 0;
			if (a < Mi) Ti(t, i, n, i + (o = Ai(t, i, n, e)), e);
			else {
				var r = new Li(t, e),
					s = function(t) {
						for (var e = 0; Mi <= t;) e |= 1 & t, t >>= 1;
						return t + e
					}(a);
				do {
					if ((o = Ai(t, i, n, e)) < s) {
						var l = a;
						s < l && (l = s), Ti(t, i, i + l, i + o, e), o = l
					}
					r.pushRun(i, o), r.mergeRuns(), a -= o, i += o
				} while (0 !== a);
				r.forceMergeRuns()
			}
		}
	}

	function Pi(t, e) {
		return t.zlevel === e.zlevel ? t.z === e.z ? t.z2 - e.z2 : t.z - e.z : t.zlevel - e.zlevel
	}

	function Ni() {
		this._roots = [], this._displayList = [], this._displayListLen = 0
	}
	Ni.prototype = {
		constructor: Ni,
		traverse: function(t, e) {
			for (var i = 0; i < this._roots.length; i++) this._roots[i].traverse(t, e)
		},
		getDisplayList: function(t, e) {
			return e = e || !1, t && this.updateDisplayList(e), this._displayList
		},
		updateDisplayList: function(t) {
			this._displayListLen = 0;
			for (var e = this._roots, i = this._displayList, n = 0, a = e.length; n < a; n++) this._updateAndAddDisplayable(e[
				n], null, t);
			i.length = this._displayListLen, v.canvasSupported && ki(i, Pi)
		},
		_updateAndAddDisplayable: function(t, e, i) {
			if (!t.ignore || i) {
				t.beforeUpdate(), t.__dirty && t.update(), t.afterUpdate();
				var n = t.clipPath;
				if (n) {
					e = e ? e.slice() : [];
					for (var a = n, o = t; a;) a.parent = o, a.updateTransform(), e.push(a), a = (o = a).clipPath
				}
				if (t.isGroup) {
					for (var r = t._children, s = 0; s < r.length; s++) {
						var l = r[s];
						t.__dirty && (l.__dirty = !0), this._updateAndAddDisplayable(l, e, i)
					}
					t.__dirty = !1
				} else t.__clipPaths = e, this._displayList[this._displayListLen++] = t
			}
		},
		addRoot: function(t) {
			t.__storage !== this && (t instanceof Si && t.addChildrenToStorage(this), this.addToStorage(t), this._roots.push(
				t))
		},
		delRoot: function(t) {
			if (null == t) {
				for (var e = 0; e < this._roots.length; e++) {
					var i = this._roots[e];
					i instanceof Si && i.delChildrenFromStorage(this)
				}
				return this._roots = [], this._displayList = [], void(this._displayListLen = 0)
			}
			if (t instanceof Array) {
				e = 0;
				for (var n = t.length; e < n; e++) this.delRoot(t[e])
			} else {
				var a = _(this._roots, t);
				0 <= a && (this.delFromStorage(t), this._roots.splice(a, 1), t instanceof Si && t.delChildrenFromStorage(this))
			}
		},
		addToStorage: function(t) {
			return t && (t.__storage = this, t.dirty(!1)), this
		},
		delFromStorage: function(t) {
			return t && (t.__storage = null), this
		},
		dispose: function() {
			this._renderList = this._roots = null
		},
		displayableSortFunc: Pi
	};
	var Oi = {
			shadowBlur: 1,
			shadowOffsetX: 1,
			shadowOffsetY: 1,
			textShadowBlur: 1,
			textShadowOffsetX: 1,
			textShadowOffsetY: 1,
			textBoxShadowBlur: 1,
			textBoxShadowOffsetX: 1,
			textBoxShadowOffsetY: 1
		},
		Ei = function(t, e, i) {
			return Oi.hasOwnProperty(e) ? i * t.dpr : i
		},
		Ri = {
			NONE: 0,
			STYLE_BIND: 1,
			PLAIN_TEXT: 2
		},
		zi = 9,
		Bi = [
			["shadowBlur", 0],
			["shadowOffsetX", 0],
			["shadowOffsetY", 0],
			["shadowColor", "#000"],
			["lineCap", "butt"],
			["lineJoin", "miter"],
			["miterLimit", 10]
		],
		Vi = function(t) {
			this.extendFrom(t, !1)
		};

	function Gi(t, e, i) {
		var n = null == e.x ? 0 : e.x,
			a = null == e.x2 ? 1 : e.x2,
			o = null == e.y ? 0 : e.y,
			r = null == e.y2 ? 0 : e.y2;
		return e.global || (n = n * i.width + i.x, a = a * i.width + i.x, o = o * i.height + i.y, r = r * i.height + i.y), n =
			isNaN(n) ? 0 : n, a = isNaN(a) ? 1 : a, o = isNaN(o) ? 0 : o, r = isNaN(r) ? 0 : r, t.createLinearGradient(n, o, a,
				r)
	}

	function Fi(t, e, i) {
		var n = i.width,
			a = i.height,
			o = Math.min(n, a),
			r = null == e.x ? .5 : e.x,
			s = null == e.y ? .5 : e.y,
			l = null == e.r ? .5 : e.r;
		return e.global || (r = r * n + i.x, s = s * a + i.y, l *= o), t.createRadialGradient(r, s, 0, r, s, l)
	}
	Vi.prototype = {
		constructor: Vi,
		fill: "#000",
		stroke: null,
		opacity: 1,
		fillOpacity: null,
		strokeOpacity: null,
		lineDash: null,
		lineDashOffset: 0,
		shadowBlur: 0,
		shadowOffsetX: 0,
		shadowOffsetY: 0,
		lineWidth: 1,
		strokeNoScale: !1,
		text: null,
		font: null,
		textFont: null,
		fontStyle: null,
		fontWeight: null,
		fontSize: null,
		fontFamily: null,
		textTag: null,
		textFill: "#000",
		textStroke: null,
		textWidth: null,
		textHeight: null,
		textStrokeWidth: 0,
		textLineHeight: null,
		textPosition: "inside",
		textRect: null,
		textOffset: null,
		textAlign: null,
		textVerticalAlign: null,
		textDistance: 5,
		textShadowColor: "transparent",
		textShadowBlur: 0,
		textShadowOffsetX: 0,
		textShadowOffsetY: 0,
		textBoxShadowColor: "transparent",
		textBoxShadowBlur: 0,
		textBoxShadowOffsetX: 0,
		textBoxShadowOffsetY: 0,
		transformText: !1,
		textRotation: 0,
		textOrigin: null,
		textBackgroundColor: null,
		textBorderColor: null,
		textBorderWidth: 0,
		textBorderRadius: 0,
		textPadding: null,
		rich: null,
		truncate: null,
		blend: null,
		bind: function(t, e, i) {
			var n = this,
				a = i && i.style,
				o = !a || t.__attrCachedBy !== Ri.STYLE_BIND;
			t.__attrCachedBy = Ri.STYLE_BIND;
			for (var r = 0; r < Bi.length; r++) {
				var s = Bi[r],
					l = s[0];
				!o && n[l] === a[l] || (t[l] = Ei(t, l, n[l] || s[1]))
			}
			if (!o && n.fill === a.fill || (t.fillStyle = n.fill), !o && n.stroke === a.stroke || (t.strokeStyle = n.stroke),
				!o && n.opacity === a.opacity || (t.globalAlpha = null == n.opacity ? 1 : n.opacity), !o && n.blend === a.blend ||
				(t.globalCompositeOperation = n.blend || "source-over"), this.hasStroke()) {
				var u = n.lineWidth;
				t.lineWidth = u / (this.strokeNoScale && e && e.getLineScale ? e.getLineScale() : 1)
			}
		},
		hasFill: function() {
			var t = this.fill;
			return null != t && "none" !== t
		},
		hasStroke: function() {
			var t = this.stroke;
			return null != t && "none" !== t && 0 < this.lineWidth
		},
		extendFrom: function(t, e) {
			if (t)
				for (var i in t) !t.hasOwnProperty(i) || !0 !== e && (!1 === e ? this.hasOwnProperty(i) : null == t[i]) || (this[
					i] = t[i])
		},
		set: function(t, e) {
			"string" == typeof t ? this[t] = e : this.extendFrom(t, !0)
		},
		clone: function() {
			var t = new this.constructor;
			return t.extendFrom(this, !0), t
		},
		getGradient: function(t, e, i) {
			for (var n = ("radial" === e.type ? Fi : Gi)(t, e, i), a = e.colorStops, o = 0; o < a.length; o++) n.addColorStop(
				a[o].offset, a[o].color);
			return n
		}
	};
	for (var Wi = Vi.prototype, Hi = 0; Hi < Bi.length; Hi++) {
		var Zi = Bi[Hi];
		Zi[0] in Wi || (Wi[Zi[0]] = Zi[1])
	}
	Vi.getGradient = Wi.getGradient;

	function Ui(t, e) {
		this.image = t, this.repeat = e, this.type = "pattern"
	}

	function Xi() {
		return !1
	}

	function Yi(t, e, i) {
		var n = g(),
			a = e.getWidth(),
			o = e.getHeight(),
			r = n.style;
		return r && (r.position = "absolute", r.left = 0, r.top = 0, r.width = a + "px", r.height = o + "px", n.setAttribute(
			"data-zr-dom-id", t)), n.width = a * i, n.height = o * i, n
	}

	function ji(t, e, i) {
		var n;
		i = i || li, "string" == typeof t ? n = Yi(t, e, i) : z(t) && (t = (n = t).id), this.id = t;
		var a = (this.dom = n).style;
		a && (n.onselectstart = Xi, a["-webkit-user-select"] = "none", a["user-select"] = "none", a["-webkit-touch-callout"] =
				"none", a["-webkit-tap-highlight-color"] = "rgba(0,0,0,0)", a.padding = 0, a.margin = 0, a["border-width"] = 0),
			this.domBack = null, this.ctxBack = null, this.painter = e, this.config = null, this.clearColor = 0, this.motionBlur = !
			1, this.lastFrameAlpha = .7, this.dpr = i
	}
	ji.prototype = {
		constructor: ji,
		__dirty: !0,
		__used: !(Ui.prototype.getCanvasPattern = function(t) {
			return t.createPattern(this.image, this.repeat || "repeat")
		}),
		__drawIndex: 0,
		__startIndex: 0,
		__endIndex: 0,
		incremental: !1,
		getElementCount: function() {
			return this.__endIndex - this.__startIndex
		},
		initContext: function() {
			this.ctx = this.dom.getContext("2d"), this.ctx.dpr = this.dpr
		},
		createBackBuffer: function() {
			var t = this.dpr;
			this.domBack = Yi("back-" + this.id, this.painter, t), this.ctxBack = this.domBack.getContext("2d"), 1 !== t &&
				this.ctxBack.scale(t, t)
		},
		resize: function(t, e) {
			var i = this.dpr,
				n = this.dom,
				a = n.style,
				o = this.domBack;
			a && (a.width = t + "px", a.height = e + "px"), n.width = t * i, n.height = e * i, o && (o.width = t * i, o.height =
				e * i, 1 !== i && this.ctxBack.scale(i, i))
		},
		clear: function(t, e) {
			var i, n = this.dom,
				a = this.ctx,
				o = n.width,
				r = n.height,
				s = (e = e || this.clearColor, this.motionBlur && !t),
				l = this.lastFrameAlpha,
				u = this.dpr;
			s && (this.domBack || this.createBackBuffer(), this.ctxBack.globalCompositeOperation = "copy", this.ctxBack.drawImage(
				n, 0, 0, o / u, r / u)), a.clearRect(0, 0, o, r), e && "transparent" !== e && (e.colorStops ? (i = e.__canvasGradient ||
					Vi.getGradient(a, e, {
						x: 0,
						y: 0,
						width: o,
						height: r
					}), e.__canvasGradient = i) : e.image && (i = Ui.prototype.getCanvasPattern.call(e, a)), a.save(), a.fillStyle =
				i || e, a.fillRect(0, 0, o, r), a.restore());
			if (s) {
				var h = this.domBack;
				a.save(), a.globalAlpha = l, a.drawImage(h, 0, 0, o, r), a.restore()
			}
		}
	};
	var qi = "undefined" != typeof window && (window.requestAnimationFrame && window.requestAnimationFrame.bind(window) ||
			window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window) || window.mozRequestAnimationFrame ||
			window.webkitRequestAnimationFrame) || function(t) {
			setTimeout(t, 16)
		},
		Ki = new _e(50);

	function $i(t) {
		if ("string" != typeof t) return t;
		var e = Ki.get(t);
		return e && e.image
	}

	function Ji(t, e, i, n, a) {
		if (t) {
			if ("string" != typeof t) return t;
			if (e && e.__zrImageSrc === t || !i) return e;
			var o = Ki.get(t),
				r = {
					hostEl: i,
					cb: n,
					cbPayload: a
				};
			return o ? tn(e = o.image) || o.pending.push(r) : ((e = new Image).onload = e.onerror = Qi, Ki.put(t, e.__cachedImgObj = {
				image: e,
				pending: [r]
			}), e.src = e.__zrImageSrc = t), e
		}
		return e
	}

	function Qi() {
		var t = this.__cachedImgObj;
		this.onload = this.onerror = this.__cachedImgObj = null;
		for (var e = 0; e < t.pending.length; e++) {
			var i = t.pending[e],
				n = i.cb;
			n && n(this, i.cbPayload), i.hostEl.dirty()
		}
		t.pending.length = 0
	}

	function tn(t) {
		return t && t.width && t.height
	}
	var en = {},
		nn = 0,
		an = 5e3,
		on = /\{([a-zA-Z0-9_]+)\|([^}]*)\}/g,
		rn = "12px sans-serif",
		sn = {};

	function ln(t, e) {
		var i = t + ":" + (e = e || rn);
		if (en[i]) return en[i];
		for (var n, a, o = (t + "").split("\n"), r = 0, s = 0, l = o.length; s < l; s++) r = Math.max((n = o[s], a = e, sn.measureText(
			n, a)).width, r);
		return an < nn && (nn = 0, en = {}), nn++, en[i] = r
	}

	function un(t, e, i, n, a, o, r, s) {
		return r ? function(t, e, i, n, a, o, r, s) {
			var l = xn(t, {
					rich: r,
					truncate: s,
					font: e,
					textAlign: i,
					textPadding: a,
					textLineHeight: o
				}),
				u = l.outerWidth,
				h = l.outerHeight,
				c = hn(0, u, i),
				d = cn(0, h, n);
			return new bi(c, d, u, h)
		}(t, e, i, n, a, o, r, s) : function(t, e, i, n, a, o, r) {
			var s = yn(t, e, a, o, r),
				l = ln(t, e);
			a && (l += a[1] + a[3]);
			var u = s.outerHeight,
				h = hn(0, l, i),
				c = cn(0, u, n),
				d = new bi(h, c, l, u);
			return d.lineHeight = s.lineHeight, d
		}(t, e, i, n, a, o, s)
	}

	function hn(t, e, i) {
		return "right" === i ? t -= e : "center" === i && (t -= e / 2), t
	}

	function cn(t, e, i) {
		return "middle" === i ? t -= e / 2 : "bottom" === i && (t -= e), t
	}

	function dn(t, e, i) {
		var n = e.textPosition,
			a = e.textDistance,
			o = i.x,
			r = i.y;
		a = a || 0;
		var s = i.height,
			l = i.width,
			u = s / 2,
			h = "left",
			c = "top";
		switch (n) {
			case "left":
				o -= a, r += u, h = "right", c = "middle";
				break;
			case "right":
				o += a + l, r += u, c = "middle";
				break;
			case "top":
				o += l / 2, r -= a, h = "center", c = "bottom";
				break;
			case "bottom":
				o += l / 2, r += s + a, h = "center";
				break;
			case "inside":
				o += l / 2, r += u, h = "center", c = "middle";
				break;
			case "insideLeft":
				o += a, r += u, c = "middle";
				break;
			case "insideRight":
				o += l - a, r += u, h = "right", c = "middle";
				break;
			case "insideTop":
				o += l / 2, r += a, h = "center";
				break;
			case "insideBottom":
				o += l / 2, r += s - a, h = "center", c = "bottom";
				break;
			case "insideTopLeft":
				o += a, r += a;
				break;
			case "insideTopRight":
				o += l - a, r += a, h = "right";
				break;
			case "insideBottomLeft":
				o += a, r += s - a, c = "bottom";
				break;
			case "insideBottomRight":
				o += l - a, r += s - a, h = "right", c = "bottom"
		}
		return (t = t || {}).x = o, t.y = r, t.textAlign = h, t.textVerticalAlign = c, t
	}

	function fn(t, e, i, n, a) {
		if (!e) return "";
		var o = (t + "").split("\n");
		a = pn(e, i, n, a);
		for (var r = 0, s = o.length; r < s; r++) o[r] = gn(o[r], a);
		return o.join("\n")
	}

	function pn(t, e, i, n) {
		(n = L({}, n)).font = e;
		i = H(i, "...");
		n.maxIterations = H(n.maxIterations, 2);
		var a = n.minChar = H(n.minChar, 0);
		n.cnCharWidth = ln("国", e);
		var o = n.ascCharWidth = ln("a", e);
		n.placeholder = H(n.placeholder, "");
		for (var r = t = Math.max(0, t - 1), s = 0; s < a && o <= r; s++) r -= o;
		var l = ln(i, e);
		return r < l && (i = "", l = 0), r = t - l, n.ellipsis = i, n.ellipsisWidth = l, n.contentWidth = r, n.containerWidth =
			t, n
	}

	function gn(t, e) {
		var i = e.containerWidth,
			n = e.font,
			a = e.contentWidth;
		if (!i) return "";
		var o = ln(t, n);
		if (o <= i) return t;
		for (var r = 0;; r++) {
			if (o <= a || r >= e.maxIterations) {
				t += e.ellipsis;
				break
			}
			var s = 0 === r ? mn(t, a, e.ascCharWidth, e.cnCharWidth) : 0 < o ? Math.floor(t.length * a / o) : 0;
			o = ln(t = t.substr(0, s), n)
		}
		return "" === t && (t = e.placeholder), t
	}

	function mn(t, e, i, n) {
		for (var a = 0, o = 0, r = t.length; o < r && a < e; o++) {
			var s = t.charCodeAt(o);
			a += 0 <= s && s <= 127 ? i : n
		}
		return o
	}

	function vn(t) {
		return ln("国", t)
	}

	function yn(t, e, i, n, a) {
		null != t && (t += "");
		var o = H(n, vn(e)),
			r = t ? t.split("\n") : [],
			s = r.length * o,
			l = s,
			u = !0;
		if (i && (l += i[0] + i[2]), t && a) {
			u = !1;
			var h = a.outerHeight,
				c = a.outerWidth;
			if (null != h && h < l) t = "", r = [];
			else if (null != c)
				for (var d = pn(c - (i ? i[1] + i[3] : 0), e, a.ellipsis, {
						minChar: a.minChar,
						placeholder: a.placeholder
					}), f = 0, p = r.length; f < p; f++) r[f] = gn(r[f], d)
		}
		return {
			lines: r,
			height: s,
			outerHeight: l,
			lineHeight: o,
			canCacheByTextString: u
		}
	}

	function xn(t, e) {
		var i = {
			lines: [],
			width: 0,
			height: 0
		};
		if (null != t && (t += ""), !t) return i;
		for (var n, a = on.lastIndex = 0; null != (n = on.exec(t));) {
			var o = n.index;
			a < o && _n(i, t.substring(a, o)), _n(i, n[2], n[1]), a = on.lastIndex
		}
		a < t.length && _n(i, t.substring(a, t.length));
		var r = i.lines,
			s = 0,
			l = 0,
			u = [],
			h = e.textPadding,
			c = e.truncate,
			d = c && c.outerWidth,
			f = c && c.outerHeight;
		h && (null != d && (d -= h[1] + h[3]), null != f && (f -= h[0] + h[2]));
		for (var p = 0; p < r.length; p++) {
			for (var g = r[p], m = 0, v = 0, y = 0; y < g.tokens.length; y++) {
				var x = (C = g.tokens[y]).styleName && e.rich[C.styleName] || {},
					_ = C.textPadding = x.textPadding,
					w = C.font = x.font || e.font,
					b = C.textHeight = H(x.textHeight, vn(w));
				if (_ && (b += _[0] + _[2]), C.height = b, C.lineHeight = Z(x.textLineHeight, e.textLineHeight, b), C.textAlign =
					x && x.textAlign || e.textAlign, C.textVerticalAlign = x && x.textVerticalAlign || "middle", null != f && s + C.lineHeight >
					f) return {
					lines: [],
					width: 0,
					height: 0
				};
				C.textWidth = ln(C.text, w);
				var S = x.textWidth,
					M = null == S || "auto" === S;
				if ("string" == typeof S && "%" === S.charAt(S.length - 1)) C.percentWidth = S, u.push(C), S = 0;
				else {
					if (M) {
						S = C.textWidth;
						var I = x.textBackgroundColor,
							A = I && I.image;
						A && tn(A = $i(A)) && (S = Math.max(S, A.width * b / A.height))
					}
					var T = _ ? _[1] + _[3] : 0;
					S += T;
					var D = null != d ? d - v : null;
					null != D && D < S && (!M || D < T ? (C.text = "", C.textWidth = S = 0) : (C.text = fn(C.text, D - T, w, c.ellipsis, {
						minChar: c.minChar
					}), C.textWidth = ln(C.text, w), S = C.textWidth + T))
				}
				v += C.width = S, x && (m = Math.max(m, C.lineHeight))
			}
			g.width = v, s += g.lineHeight = m, l = Math.max(l, v)
		}
		i.outerWidth = i.width = H(e.textWidth, l), i.outerHeight = i.height = H(e.textHeight, s), h && (i.outerWidth += h[1] +
			h[3], i.outerHeight += h[0] + h[2]);
		for (p = 0; p < u.length; p++) {
			var C, L = (C = u[p]).percentWidth;
			C.width = parseInt(L, 10) / 100 * l
		}
		return i
	}

	function _n(t, e, i) {
		for (var n = "" === e, a = e.split("\n"), o = t.lines, r = 0; r < a.length; r++) {
			var s = a[r],
				l = {
					styleName: i,
					text: s,
					isLineHolder: !s && !n
				};
			if (r) o.push({
				tokens: [l]
			});
			else {
				var u = (o[o.length - 1] || (o[0] = {
						tokens: []
					})).tokens,
					h = u.length;
				1 === h && u[0].isLineHolder ? u[0] = l : !s && h && !n || u.push(l)
			}
		}
	}

	function wn(t) {
		var e = (t.fontSize || t.fontFamily) && [t.fontStyle, t.fontWeight, (t.fontSize || 12) + "px", t.fontFamily ||
			"sans-serif"
		].join(" ");
		return e && j(e) || t.textFont || t.font
	}

	function bn(t, e) {
		var i, n, a, o, r, s = e.x,
			l = e.y,
			u = e.width,
			h = e.height,
			c = e.r;
		u < 0 && (s += u, u = -u), h < 0 && (l += h, h = -h), "number" == typeof c ? i = n = a = o = c : c instanceof Array ?
			1 === c.length ? i = n = a = o = c[0] : 2 === c.length ? (i = a = c[0], n = o = c[1]) : 3 === c.length ? (i = c[0],
				n = o = c[1], a = c[2]) : (i = c[0], n = c[1], a = c[2], o = c[3]) : i = n = a = o = 0, u < i + n && (i *= u / (r =
				i + n), n *= u / r), u < a + o && (a *= u / (r = a + o), o *= u / r), h < n + a && (n *= h / (r = n + a), a *= h /
				r), h < i + o && (i *= h / (r = i + o), o *= h / r), t.moveTo(s + i, l), t.lineTo(s + u - n, l), 0 !== n && t.arc(
				s + u - n, l + n, n, -Math.PI / 2, 0), t.lineTo(s + u, l + h - a), 0 !== a && t.arc(s + u - a, l + h - a, a, 0,
				Math.PI / 2), t.lineTo(s + o, l + h), 0 !== o && t.arc(s + o, l + h - o, o, Math.PI / 2, Math.PI), t.lineTo(s, l +
				i), 0 !== i && t.arc(s + i, l + i, i, Math.PI, 1.5 * Math.PI)
	}
	sn.measureText = function(t, e) {
		var i = x();
		return i.font = e || rn, i.measureText(t)
	};
	var Sn = rn,
		Mn = {
			left: 1,
			right: 1,
			center: 1
		},
		In = {
			top: 1,
			bottom: 1,
			middle: 1
		},
		An = [
			["textShadowBlur", "shadowBlur", 0],
			["textShadowOffsetX", "shadowOffsetX", 0],
			["textShadowOffsetY", "shadowOffsetY", 0],
			["textShadowColor", "shadowColor", "transparent"]
		],
		Tn = {},
		Dn = {};

	function Cn(t) {
		return Ln(t), E(t.rich, Ln), t
	}

	function Ln(t) {
		if (t) {
			t.font = wn(t);
			var e = t.textAlign;
			"middle" === e && (e = "center"), t.textAlign = null == e || Mn[e] ? e : "left";
			var i = t.textVerticalAlign || t.textBaseline;
			"center" === i && (i = "middle"), t.textVerticalAlign = null == i || In[i] ? i : "top", t.textPadding && (t.textPadding =
				X(t.textPadding))
		}
	}

	function kn(t, e, i, n, a, o) {
		n.rich ? function(t, e, i, n, a, o) {
			o !== zi && (e.__attrCachedBy = Ri.NONE);
			var r = t.__textCotentBlock;
			r && !t.__dirtyText || (r = t.__textCotentBlock = xn(i, n));
			! function(t, e, i, n, a) {
				var o = i.width,
					r = i.outerWidth,
					s = i.outerHeight,
					l = n.textPadding,
					u = zn(Dn, t, n, a),
					h = u.baseX,
					c = u.baseY,
					d = u.textAlign,
					f = u.textVerticalAlign;
				Pn(e, n, a, h, c);
				var p = hn(h, r, d),
					g = cn(c, s, f),
					m = p,
					v = g;
				l && (m += l[3], v += l[0]);
				var y = m + o;
				On(n) && En(t, e, n, p, g, r, s);
				for (var x = 0; x < i.lines.length; x++) {
					for (var _, w = i.lines[x], b = w.tokens, S = b.length, M = w.lineHeight, I = w.width, A = 0, T = m, D = y, C =
							S - 1; A < S && (!(_ = b[A]).textAlign || "left" === _.textAlign);) Nn(t, e, _, n, M, v, T, "left"), I -= _.width,
						T += _.width, A++;
					for (; 0 <= C && "right" === (_ = b[C]).textAlign;) Nn(t, e, _, n, M, v, D, "right"), I -= _.width, D -= _.width,
						C--;
					for (T += (o - (T - m) - (y - D) - I) / 2; A <= C;) _ = b[A], Nn(t, e, _, n, M, v, T + _.width / 2, "center"), T +=
						_.width, A++;
					v += M
				}
			}(t, e, r, n, a)
		}(t, e, i, n, a, o) : function(t, e, i, n, a, o) {
			var r, s = On(n),
				l = !1,
				u = e.__attrCachedBy === Ri.PLAIN_TEXT;
			o !== zi ? (o && (r = o.style, l = !s && u && r), e.__attrCachedBy = s ? Ri.NONE : Ri.PLAIN_TEXT) : u && (e.__attrCachedBy =
				Ri.NONE);
			var h = n.font || Sn;
			l && h === (r.font || Sn) || (e.font = h);
			var c = t.__computedFont;
			t.__styleFont !== h && (t.__styleFont = h, c = t.__computedFont = e.font);
			var d = n.textPadding,
				f = n.textLineHeight,
				p = t.__textCotentBlock;
			p && !t.__dirtyText || (p = t.__textCotentBlock = yn(i, c, d, f, n.truncate));
			var g = p.outerHeight,
				m = p.lines,
				v = p.lineHeight,
				y = zn(Dn, t, n, a),
				x = y.baseX,
				_ = y.baseY,
				w = y.textAlign || "left",
				b = y.textVerticalAlign;
			Pn(e, n, a, x, _);
			var S = cn(_, g, b),
				M = x,
				I = S;
			if (s || d) {
				var A = ln(i, c);
				d && (A += d[1] + d[3]);
				var T = hn(x, A, w);
				s && En(t, e, n, T, S, A, g), d && (M = Wn(x, w, d), I += d[0])
			}
			e.textAlign = w, e.textBaseline = "middle", e.globalAlpha = n.opacity || 1;
			for (var D = 0; D < An.length; D++) {
				var C = An[D],
					L = C[0],
					k = C[1],
					P = n[L];
				l && P === r[L] || (e[k] = Ei(e, k, P || C[2]))
			}
			I += v / 2;
			var N = n.textStrokeWidth,
				O = l ? r.textStrokeWidth : null,
				E = !l || N !== O,
				R = !l || E || n.textStroke !== r.textStroke,
				z = Vn(n.textStroke, N),
				B = Gn(n.textFill);
			z && (E && (e.lineWidth = N), R && (e.strokeStyle = z));
			B && (l && n.textFill === r.textFill || (e.fillStyle = B));
			if (1 === m.length) z && e.strokeText(m[0], M, I), B && e.fillText(m[0], M, I);
			else
				for (D = 0; D < m.length; D++) z && e.strokeText(m[D], M, I), B && e.fillText(m[D], M, I), I += v
		}(t, e, i, n, a, o)
	}

	function Pn(t, e, i, n, a) {
		if (i && e.textRotation) {
			var o = e.textOrigin;
			"center" === o ? (n = i.width / 2 + i.x, a = i.height / 2 + i.y) : o && (n = o[0] + i.x, a = o[1] + i.y), t.translate(
				n, a), t.rotate(-e.textRotation), t.translate(-n, -a)
		}
	}

	function Nn(t, e, i, n, a, o, r, s) {
		var l = n.rich[i.styleName] || {};
		l.text = i.text;
		var u = i.textVerticalAlign,
			h = o + a / 2;
		"top" === u ? h = o + i.height / 2 : "bottom" === u && (h = o + a - i.height / 2), !i.isLineHolder && On(l) && En(t,
			e, l, "right" === s ? r - i.width : "center" === s ? r - i.width / 2 : r, h - i.height / 2, i.width, i.height);
		var c = i.textPadding;
		c && (r = Wn(r, s, c), h -= i.height / 2 - c[2] - i.textHeight / 2), Bn(e, "shadowBlur", Z(l.textShadowBlur, n.textShadowBlur,
			0)), Bn(e, "shadowColor", l.textShadowColor || n.textShadowColor || "transparent"), Bn(e, "shadowOffsetX", Z(l.textShadowOffsetX,
			n.textShadowOffsetX, 0)), Bn(e, "shadowOffsetY", Z(l.textShadowOffsetY, n.textShadowOffsetY, 0)), Bn(e,
			"textAlign", s), Bn(e, "textBaseline", "middle"), Bn(e, "font", i.font || Sn);
		var d = Vn(l.textStroke || n.textStroke, p),
			f = Gn(l.textFill || n.textFill),
			p = H(l.textStrokeWidth, n.textStrokeWidth);
		d && (Bn(e, "lineWidth", p), Bn(e, "strokeStyle", d), e.strokeText(i.text, r, h)), f && (Bn(e, "fillStyle", f), e.fillText(
			i.text, r, h))
	}

	function On(t) {
		return !!(t.textBackgroundColor || t.textBorderWidth && t.textBorderColor)
	}

	function En(t, e, i, n, a, o, r) {
		var s = i.textBackgroundColor,
			l = i.textBorderWidth,
			u = i.textBorderColor,
			h = R(s);
		if (Bn(e, "shadowBlur", i.textBoxShadowBlur || 0), Bn(e, "shadowColor", i.textBoxShadowColor || "transparent"), Bn(e,
				"shadowOffsetX", i.textBoxShadowOffsetX || 0), Bn(e, "shadowOffsetY", i.textBoxShadowOffsetY || 0), h || l && u) {
			e.beginPath();
			var c = i.textBorderRadius;
			c ? bn(e, {
				x: n,
				y: a,
				width: o,
				height: r,
				r: c
			}) : e.rect(n, a, o, r), e.closePath()
		}
		if (h)
			if (Bn(e, "fillStyle", s), null != i.fillOpacity) {
				var d = e.globalAlpha;
				e.globalAlpha = i.fillOpacity * i.opacity, e.fill(), e.globalAlpha = d
			} else e.fill();
		else if (z(s)) {
			var f = s.image;
			(f = Ji(f, null, t, Rn, s)) && tn(f) && e.drawImage(f, n, a, o, r)
		}
		if (l && u)
			if (Bn(e, "lineWidth", l), Bn(e, "strokeStyle", u), null != i.strokeOpacity) {
				d = e.globalAlpha;
				e.globalAlpha = i.strokeOpacity * i.opacity, e.stroke(), e.globalAlpha = d
			} else e.stroke()
	}

	function Rn(t, e) {
		e.image = t
	}

	function zn(t, e, i, n) {
		var a = i.x || 0,
			o = i.y || 0,
			r = i.textAlign,
			s = i.textVerticalAlign;
		if (n) {
			var l = i.textPosition;
			if (l instanceof Array) a = n.x + Fn(l[0], n.width), o = n.y + Fn(l[1], n.height);
			else {
				var u = e && e.calculateTextPosition ? e.calculateTextPosition(Tn, i, n) : dn(Tn, i, n);
				a = u.x, o = u.y, r = r || u.textAlign, s = s || u.textVerticalAlign
			}
			var h = i.textOffset;
			h && (a += h[0], o += h[1])
		}
		return (t = t || {}).baseX = a, t.baseY = o, t.textAlign = r, t.textVerticalAlign = s, t
	}

	function Bn(t, e, i) {
		return t[e] = Ei(t, e, i), t[e]
	}

	function Vn(t, e) {
		return null == t || e <= 0 || "transparent" === t || "none" === t ? null : t.image || t.colorStops ? "#000" : t
	}

	function Gn(t) {
		return null == t || "none" === t ? null : t.image || t.colorStops ? "#000" : t
	}

	function Fn(t, e) {
		return "string" == typeof t ? 0 <= t.lastIndexOf("%") ? parseFloat(t) / 100 * e : parseFloat(t) : t
	}

	function Wn(t, e, i) {
		return "right" === e ? t - i[1] : "center" === e ? t + i[3] / 2 - i[1] / 2 : t + i[3]
	}

	function Hn(t, e) {
		return null != t && (t || e.textBackgroundColor || e.textBorderWidth && e.textBorderColor || e.textPadding)
	}

	function Zn() {}
	var Un = new bi;

	function Xn(t) {
		for (var e in t = t || {}, pi.call(this, t), t) t.hasOwnProperty(e) && "style" !== e && (this[e] = t[e]);
		this.style = new Vi(t.style, this), this._rect = null, this.__clipPaths = null
	}

	function Yn(t) {
		Xn.call(this, t)
	}
	Xn.prototype = {
		constructor: Xn,
		type: "displayable",
		__dirty: !0,
		invisible: !(Zn.prototype = {
			constructor: Zn,
			drawRectText: function(t, e) {
				var i = this.style;
				e = i.textRect || e, this.__dirty && Cn(i);
				var n = i.text;
				if (null != n && (n += ""), Hn(n, i)) {
					t.save();
					var a = this.transform;
					i.transformText ? this.setTransform(t) : a && (Un.copy(e), Un.applyTransform(a), e = Un), kn(this, t, n, i, e,
						zi), t.restore()
				}
			}
		}),
		z: 0,
		z2: 0,
		zlevel: 0,
		draggable: !1,
		dragging: !1,
		silent: !1,
		culling: !1,
		cursor: "pointer",
		rectHover: !1,
		progressive: !1,
		incremental: !1,
		globalScaleRatio: 1,
		beforeBrush: function(t) {},
		afterBrush: function(t) {},
		brush: function(t, e) {},
		getBoundingRect: function() {},
		contain: function(t, e) {
			return this.rectContain(t, e)
		},
		traverse: function(t, e) {
			t.call(e, this)
		},
		rectContain: function(t, e) {
			var i = this.transformCoordToLocal(t, e);
			return this.getBoundingRect().contain(i[0], i[1])
		},
		dirty: function() {
			this.__dirty = this.__dirtyText = !0, this._rect = null, this.__zr && this.__zr.refresh()
		},
		animateStyle: function(t) {
			return this.animate("style", t)
		},
		attrKV: function(t, e) {
			"style" !== t ? pi.prototype.attrKV.call(this, t, e) : this.style.set(e)
		},
		setStyle: function(t, e) {
			return this.style.set(t, e), this.dirty(!1), this
		},
		useStyle: function(t) {
			return this.style = new Vi(t, this), this.dirty(!1), this
		},
		calculateTextPosition: null
	}, w(Xn, pi), b(Xn, Zn), Yn.prototype = {
		constructor: Yn,
		type: "image",
		brush: function(t, e) {
			var i = this.style,
				n = i.image;
			i.bind(t, this, e);
			var a = this._image = Ji(n, this._image, this, this.onload);
			if (a && tn(a)) {
				var o = i.x || 0,
					r = i.y || 0,
					s = i.width,
					l = i.height,
					u = a.width / a.height;
				if (null == s && null != l ? s = l * u : null == l && null != s ? l = s / u : null == s && null == l && (s = a.width,
						l = a.height), this.setTransform(t), i.sWidth && i.sHeight) {
					var h = i.sx || 0,
						c = i.sy || 0;
					t.drawImage(a, h, c, i.sWidth, i.sHeight, o, r, s, l)
				} else if (i.sx && i.sy) {
					var d = s - (h = i.sx),
						f = l - (c = i.sy);
					t.drawImage(a, h, c, d, f, o, r, s, l)
				} else t.drawImage(a, o, r, s, l);
				null != i.text && (this.restoreTransform(t), this.drawRectText(t, this.getBoundingRect()))
			}
		},
		getBoundingRect: function() {
			var t = this.style;
			return this._rect || (this._rect = new bi(t.x || 0, t.y || 0, t.width || 0, t.height || 0)), this._rect
		}
	}, w(Yn, Xn);
	var jn = 314159;

	function qn(t) {
		return parseInt(t, 10)
	}
	var Kn = new bi(0, 0, 0, 0),
		$n = new bi(0, 0, 0, 0);

	function Jn(t, e, i) {
		this.type = "canvas";
		var n = !t.nodeName || "CANVAS" === t.nodeName.toUpperCase();
		this._opts = i = L({}, i || {}), this.dpr = i.devicePixelRatio || li, this._singleCanvas = n;
		var a = (this.root = t).style;
		a && (a["-webkit-tap-highlight-color"] = "transparent", a["-webkit-user-select"] = a["user-select"] = a[
			"-webkit-touch-callout"] = "none", t.innerHTML = ""), this.storage = e;
		var o = this._zlevelList = [],
			r = this._layers = {};
		if (this._layerConfig = {}, this._needsManuallyCompositing = !1, n) {
			var s = t.width,
				l = t.height;
			null != i.width && (s = i.width), null != i.height && (l = i.height), this.dpr = i.devicePixelRatio || 1, t.width =
				s * this.dpr, t.height = l * this.dpr, this._width = s, this._height = l;
			var u = new ji(t, this, this.dpr);
			u.__builtin__ = !0, u.initContext(), (r[jn] = u).zlevel = jn, o.push(jn), this._domRoot = t
		} else {
			this._width = this._getSize(0), this._height = this._getSize(1);
			var h = this._domRoot = function(t, e) {
				var i = document.createElement("div");
				return i.style.cssText = ["position:relative", "width:" + t + "px", "height:" + e + "px", "padding:0", "margin:0",
					"border-width:0"
				].join(";") + ";", i
			}(this._width, this._height);
			t.appendChild(h)
		}
		this._hoverlayer = null, this._hoverElements = []
	}
	Jn.prototype = {
		constructor: Jn,
		getType: function() {
			return "canvas"
		},
		isSingleCanvas: function() {
			return this._singleCanvas
		},
		getViewportRoot: function() {
			return this._domRoot
		},
		getViewportRootOffset: function() {
			var t = this.getViewportRoot();
			if (t) return {
				offsetLeft: t.offsetLeft || 0,
				offsetTop: t.offsetTop || 0
			}
		},
		refresh: function(t) {
			var e = this.storage.getDisplayList(!0),
				i = this._zlevelList;
			this._redrawId = Math.random(), this._paintList(e, t, this._redrawId);
			for (var n = 0; n < i.length; n++) {
				var a = i[n],
					o = this._layers[a];
				if (!o.__builtin__ && o.refresh) {
					var r = 0 === n ? this._backgroundColor : null;
					o.refresh(r)
				}
			}
			return this.refreshHover(), this
		},
		addHover: function(t, e) {
			if (!t.__hoverMir) {
				var i = new t.constructor({
					style: t.style,
					shape: t.shape,
					z: t.z,
					z2: t.z2,
					silent: t.silent
				});
				return (i.__from = t).__hoverMir = i, e && i.setStyle(e), this._hoverElements.push(i), i
			}
		},
		removeHover: function(t) {
			var e = t.__hoverMir,
				i = this._hoverElements,
				n = _(i, e);
			0 <= n && i.splice(n, 1), t.__hoverMir = null
		},
		clearHover: function(t) {
			for (var e = this._hoverElements, i = 0; i < e.length; i++) {
				var n = e[i].__from;
				n && (n.__hoverMir = null)
			}
			e.length = 0
		},
		refreshHover: function() {
			var t = this._hoverElements,
				e = t.length,
				i = this._hoverlayer;
			if (i && i.clear(), e) {
				ki(t, this.storage.displayableSortFunc);
				var n = {};
				(i = i || (this._hoverlayer = this.getLayer(1e5))).ctx.save();
				for (var a = 0; a < e;) {
					var o = t[a],
						r = o.__from;
					r && r.__zr ? (a++, r.invisible || (o.transform = r.transform, o.invTransform = r.invTransform, o.__clipPaths =
						r.__clipPaths, this._doPaintEl(o, i, !0, n))) : (t.splice(a, 1), r.__hoverMir = null, e--)
				}
				i.ctx.restore()
			}
		},
		getHoverLayer: function() {
			return this.getLayer(1e5)
		},
		_paintList: function(t, e, i) {
			if (this._redrawId === i) {
				e = e || !1, this._updateLayerStatus(t);
				var n = this._doPaintList(t, e);
				if (this._needsManuallyCompositing && this._compositeManually(), !n) {
					var a = this;
					qi(function() {
						a._paintList(t, e, i)
					})
				}
			}
		},
		_compositeManually: function() {
			var e = this.getLayer(jn).ctx,
				i = this._domRoot.width,
				n = this._domRoot.height;
			e.clearRect(0, 0, i, n), this.eachBuiltinLayer(function(t) {
				t.virtual && e.drawImage(t.dom, 0, 0, i, n)
			})
		},
		_doPaintList: function(t, e) {
			for (var i = [], n = 0; n < this._zlevelList.length; n++) {
				var a = this._zlevelList[n];
				(s = this._layers[a]).__builtin__ && s !== this._hoverlayer && (s.__dirty || e) && i.push(s)
			}
			for (var o = !0, r = 0; r < i.length; r++) {
				var s, l = (s = i[r]).ctx,
					u = {};
				l.save();
				var h = e ? s.__startIndex : s.__drawIndex,
					c = !e && s.incremental && Date.now,
					d = c && Date.now(),
					f = s.zlevel === this._zlevelList[0] ? this._backgroundColor : null;
				if (s.__startIndex === s.__endIndex) s.clear(!1, f);
				else if (h === s.__startIndex) {
					var p = t[h];
					p.incremental && p.notClear && !e || s.clear(!1, f)
				} - 1 === h && (console.error("For some unknown reason. drawIndex is -1"), h = s.__startIndex);
				for (var g = h; g < s.__endIndex; g++) {
					var m = t[g];
					if (this._doPaintEl(m, s, e, u), m.__dirty = m.__dirtyText = !1, c)
						if (15 < Date.now() - d) break
				}
				s.__drawIndex = g, s.__drawIndex < s.__endIndex && (o = !1), u.prevElClipPaths && l.restore(), l.restore()
			}
			return v.wxa && E(this._layers, function(t) {
				t && t.ctx && t.ctx.draw && t.ctx.draw()
			}), o
		},
		_doPaintEl: function(t, e, i, n) {
			var a = e.ctx,
				o = t.transform;
			if ((e.__dirty || i) && !t.invisible && 0 !== t.style.opacity && (!o || o[0] || o[3]) && (!t.culling || ! function(
					t, e, i) {
					return Kn.copy(t.getBoundingRect()), t.transform && Kn.applyTransform(t.transform), $n.width = e, $n.height =
						i, !Kn.intersect($n)
				}(t, this._width, this._height))) {
				var r = t.__clipPaths,
					s = n.prevElClipPaths;
				s && ! function(t, e) {
					if (t === e) return !1;
					if (!t || !e || t.length !== e.length) return !0;
					for (var i = 0; i < t.length; i++)
						if (t[i] !== e[i]) return !0;
					return !1
				}(r, s) || (s && (a.restore(), n.prevElClipPaths = null, n.prevEl = null), r && (a.save(), function(t, e) {
					for (var i = 0; i < t.length; i++) {
						var n = t[i];
						n.setTransform(e), e.beginPath(), n.buildPath(e, n.shape), e.clip(), n.restoreTransform(e)
					}
				}(r, a), n.prevElClipPaths = r)), t.beforeBrush && t.beforeBrush(a), t.brush(a, n.prevEl || null), (n.prevEl =
					t).afterBrush && t.afterBrush(a)
			}
		},
		getLayer: function(t, e) {
			this._singleCanvas && !this._needsManuallyCompositing && (t = jn);
			var i = this._layers[t];
			return i || ((i = new ji("zr_" + t, this, this.dpr)).zlevel = t, i.__builtin__ = !0, this._layerConfig[t] && m(i,
				this._layerConfig[t], !0), e && (i.virtual = e), this.insertLayer(t, i), i.initContext()), i
		},
		insertLayer: function(t, e) {
			var i = this._layers,
				n = this._zlevelList,
				a = n.length,
				o = null,
				r = -1,
				s = this._domRoot;
			if (i[t]) ci("ZLevel " + t + " has been used already");
			else if (function(t) {
					return !!t && (!!t.__builtin__ || "function" == typeof t.resize && "function" == typeof t.refresh)
				}(e)) {
				if (0 < a && t > n[0]) {
					for (r = 0; r < a - 1 && !(n[r] < t && n[r + 1] > t); r++);
					o = i[n[r]]
				}
				if (n.splice(r + 1, 0, t), !(i[t] = e).virtual)
					if (o) {
						var l = o.dom;
						l.nextSibling ? s.insertBefore(e.dom, l.nextSibling) : s.appendChild(e.dom)
					} else s.firstChild ? s.insertBefore(e.dom, s.firstChild) : s.appendChild(e.dom)
			} else ci("Layer of zlevel " + t + " is not valid")
		},
		eachLayer: function(t, e) {
			var i, n, a = this._zlevelList;
			for (n = 0; n < a.length; n++) i = a[n], t.call(e, this._layers[i], i)
		},
		eachBuiltinLayer: function(t, e) {
			var i, n, a, o = this._zlevelList;
			for (a = 0; a < o.length; a++) n = o[a], (i = this._layers[n]).__builtin__ && t.call(e, i, n)
		},
		eachOtherLayer: function(t, e) {
			var i, n, a, o = this._zlevelList;
			for (a = 0; a < o.length; a++) n = o[a], (i = this._layers[n]).__builtin__ || t.call(e, i, n)
		},
		getLayers: function() {
			return this._layers
		},
		_updateLayerStatus: function(t) {
			function e(t) {
				n && (n.__endIndex !== t && (n.__dirty = !0), n.__endIndex = t)
			}
			if (this.eachBuiltinLayer(function(t, e) {
					t.__dirty = t.__used = !1
				}), this._singleCanvas)
				for (var i = 1; i < t.length; i++) {
					if ((o = t[i]).zlevel !== t[i - 1].zlevel || o.incremental) {
						this._needsManuallyCompositing = !0;
						break
					}
				}
			var n = null,
				a = 0;
			for (i = 0; i < t.length; i++) {
				var o, r, s = (o = t[i]).zlevel;
				o.incremental ? ((r = this.getLayer(s + .001, this._needsManuallyCompositing)).incremental = !0, a = 1) : r =
					this.getLayer(s + (0 < a ? .01 : 0), this._needsManuallyCompositing), r.__builtin__ || ci("ZLevel " + s +
						" has been used by unkown layer " + r.id), r !== n && (r.__used = !0, r.__startIndex !== i && (r.__dirty = !0),
						r.__startIndex = i, r.incremental ? r.__drawIndex = -1 : r.__drawIndex = i, e(i), n = r), o.__dirty && (r.__dirty = !
						0, r.incremental && r.__drawIndex < 0 && (r.__drawIndex = i))
			}
			e(i), this.eachBuiltinLayer(function(t, e) {
				!t.__used && 0 < t.getElementCount() && (t.__dirty = !0, t.__startIndex = t.__endIndex = t.__drawIndex = 0), t
					.__dirty && t.__drawIndex < 0 && (t.__drawIndex = t.__startIndex)
			})
		},
		clear: function() {
			return this.eachBuiltinLayer(this._clearLayer), this
		},
		_clearLayer: function(t) {
			t.clear()
		},
		setBackgroundColor: function(t) {
			this._backgroundColor = t
		},
		configLayer: function(t, e) {
			if (e) {
				var i = this._layerConfig;
				i[t] ? m(i[t], e, !0) : i[t] = e;
				for (var n = 0; n < this._zlevelList.length; n++) {
					var a = this._zlevelList[n];
					if (a === t || a === t + .01) m(this._layers[a], i[t], !0)
				}
			}
		},
		delLayer: function(t) {
			var e = this._layers,
				i = this._zlevelList,
				n = e[t];
			n && (n.dom.parentNode.removeChild(n.dom), delete e[t], i.splice(_(i, t), 1))
		},
		resize: function(e, i) {
			if (this._domRoot.style) {
				var t = this._domRoot;
				t.style.display = "none";
				var n = this._opts;
				if (null != e && (n.width = e), null != i && (n.height = i), e = this._getSize(0), i = this._getSize(1), t.style
					.display = "", this._width !== e || i !== this._height) {
					for (var a in t.style.width = e + "px", t.style.height = i + "px", this._layers) this._layers.hasOwnProperty(a) &&
						this._layers[a].resize(e, i);
					E(this._progressiveLayers, function(t) {
						t.resize(e, i)
					}), this.refresh(!0)
				}
				this._width = e, this._height = i
			} else {
				if (null == e || null == i) return;
				this._width = e, this._height = i, this.getLayer(jn).resize(e, i)
			}
			return this
		},
		clearLayer: function(t) {
			var e = this._layers[t];
			e && e.clear()
		},
		dispose: function() {
			this.root.innerHTML = "", this.root = this.storage = this._domRoot = this._layers = null
		},
		getRenderedCanvas: function(t) {
			if (t = t || {}, this._singleCanvas && !this._compositeManually) return this._layers[jn].dom;
			var e = new ji("image", this, t.pixelRatio || this.dpr);
			if (e.initContext(), e.clear(!1, t.backgroundColor || this._backgroundColor), t.pixelRatio <= this.dpr) {
				this.refresh();
				var i = e.dom.width,
					n = e.dom.height,
					a = e.ctx;
				this.eachLayer(function(t) {
					t.__builtin__ ? a.drawImage(t.dom, 0, 0, i, n) : t.renderToCanvas && (e.ctx.save(), t.renderToCanvas(e.ctx),
						e.ctx.restore())
				})
			} else
				for (var o = {}, r = this.storage.getDisplayList(!0), s = 0; s < r.length; s++) {
					var l = r[s];
					this._doPaintEl(l, e, !0, o)
				}
			return e.dom
		},
		getWidth: function() {
			return this._width
		},
		getHeight: function() {
			return this._height
		},
		_getSize: function(t) {
			var e = this._opts,
				i = ["width", "height"][t],
				n = ["clientWidth", "clientHeight"][t],
				a = ["paddingLeft", "paddingTop"][t],
				o = ["paddingRight", "paddingBottom"][t];
			if (null != e[i] && "auto" !== e[i]) return parseFloat(e[i]);
			var r = this.root,
				s = document.defaultView.getComputedStyle(r);
			return (r[n] || qn(s[i]) || qn(r.style[i])) - (qn(s[a]) || 0) - (qn(s[o]) || 0) | 0
		},
		pathToImage: function(t, e) {
			e = e || this.dpr;
			var i = document.createElement("canvas"),
				n = i.getContext("2d"),
				a = t.getBoundingRect(),
				o = t.style,
				r = o.shadowBlur * e,
				s = o.shadowOffsetX * e,
				l = o.shadowOffsetY * e,
				u = o.hasStroke() ? o.lineWidth : 0,
				h = Math.max(u / 2, r - s),
				c = Math.max(u / 2, s + r),
				d = Math.max(u / 2, r - l),
				f = Math.max(u / 2, l + r),
				p = a.width + h + c,
				g = a.height + d + f;
			i.width = p * e, i.height = g * e, n.scale(e, e), n.clearRect(0, 0, p, g), n.dpr = e;
			var m = {
				position: t.position,
				rotation: t.rotation,
				scale: t.scale
			};
			t.position = [h - a.x, d - a.y], t.rotation = 0, t.scale = [1, 1], t.updateTransform(), t && t.brush(n);
			var v = new Yn({
				style: {
					x: 0,
					y: 0,
					image: i
				}
			});
			return null != m.position && (v.position = t.position = m.position), null != m.rotation && (v.rotation = t.rotation =
				m.rotation), null != m.scale && (v.scale = t.scale = m.scale), v
		}
	};

	function Qn(t) {
		t = t || {}, this.stage = t.stage || {}, this.onframe = t.onframe || function() {}, this._clips = [], this._running = !
			1, this._time, this._pausedTime, this._pauseStart, this._paused = !1, Ct.call(this)
	}
	Qn.prototype = {
		constructor: Qn,
		addClip: function(t) {
			this._clips.push(t)
		},
		addAnimator: function(t) {
			t.animation = this;
			for (var e = t.getClips(), i = 0; i < e.length; i++) this.addClip(e[i])
		},
		removeClip: function(t) {
			var e = _(this._clips, t);
			0 <= e && this._clips.splice(e, 1)
		},
		removeAnimator: function(t) {
			for (var e = t.getClips(), i = 0; i < e.length; i++) this.removeClip(e[i]);
			t.animation = null
		},
		_update: function() {
			for (var t = (new Date).getTime() - this._pausedTime, e = t - this._time, i = this._clips, n = i.length, a = [],
					o = [], r = 0; r < n; r++) {
				var s = i[r],
					l = s.step(t, e);
				l && (a.push(l), o.push(s))
			}
			for (r = 0; r < n;) i[r]._needsRemove ? (i[r] = i[n - 1], i.pop(), n--) : r++;
			n = a.length;
			for (r = 0; r < n; r++) o[r].fire(a[r]);
			this._time = t, this.onframe(e), this.trigger("frame", e), this.stage.update && this.stage.update()
		},
		_startLoop: function() {
			var e = this;
			this._running = !0, qi(function t() {
				e._running && (qi(t), e._paused || e._update())
			})
		},
		start: function() {
			this._time = (new Date).getTime(), this._pausedTime = 0, this._startLoop()
		},
		stop: function() {
			this._running = !1
		},
		pause: function() {
			this._paused || (this._pauseStart = (new Date).getTime(), this._paused = !0)
		},
		resume: function() {
			this._paused && (this._pausedTime += (new Date).getTime() - this._pauseStart, this._paused = !1)
		},
		clear: function() {
			this._clips = []
		},
		isFinished: function() {
			return !this._clips.length
		},
		animate: function(t, e) {
			var i = new ri(t, (e = e || {}).loop, e.getter, e.setter);
			return this.addAnimator(i), i
		}
	}, b(Qn, Ct);
	var ta = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"],
		ea = ["touchstart", "touchend", "touchmove"],
		ia = {
			pointerdown: 1,
			pointerup: 1,
			pointermove: 1,
			pointerout: 1
		},
		na = N(ta, function(t) {
			var e = t.replace("mouse", "pointer");
			return ia[e] ? e : t
		});

	function aa(t) {
		return "mousewheel" === t && v.browser.firefox ? "DOMMouseScroll" : t
	}

	function oa(t) {
		t._touching = !0, clearTimeout(t._touchTimer), t._touchTimer = setTimeout(function() {
			t._touching = !1
		}, 700)
	}
	var ra = {
		mousemove: function(t) {
			t = Vt(this.dom, t), this.trigger("mousemove", t)
		},
		mouseout: function(t) {
			var e = (t = Vt(this.dom, t)).toElement || t.relatedTarget;
			if (e !== this.dom)
				for (; e && 9 !== e.nodeType;) {
					if (e === this.dom) return;
					e = e.parentNode
				}
			this.trigger("mouseout", t)
		},
		touchstart: function(t) {
			(t = Vt(this.dom, t)).zrByTouch = !0, this._lastTouchMoment = new Date, this.handler.processGesture(t, "start"),
				ra.mousemove.call(this, t), ra.mousedown.call(this, t), oa(this)
		},
		touchmove: function(t) {
			(t = Vt(this.dom, t)).zrByTouch = !0, this.handler.processGesture(t, "change"), ra.mousemove.call(this, t), oa(
				this)
		},
		touchend: function(t) {
			(t = Vt(this.dom, t)).zrByTouch = !0, this.handler.processGesture(t, "end"), ra.mouseup.call(this, t), +new Date -
				this._lastTouchMoment < 300 && ra.click.call(this, t), oa(this)
		},
		pointerdown: function(t) {
			ra.mousedown.call(this, t)
		},
		pointermove: function(t) {
			sa(t) || ra.mousemove.call(this, t)
		},
		pointerup: function(t) {
			ra.mouseup.call(this, t)
		},
		pointerout: function(t) {
			sa(t) || ra.mouseout.call(this, t)
		}
	};

	function sa(t) {
		var e = t.pointerType;
		return "pen" === e || "touch" === e
	}

	function la(i) {
		function t(t, e) {
			E(t, function(t) {
				Gt(i, aa(t), e._handlers[t])
			}, e)
		}
		Ct.call(this), this.dom = i, this._touching = !1, this._touchTimer, this._handlers = {},
			function(e) {
				E(ea, function(t) {
					e._handlers[t] = T(ra[t], e)
				}), E(na, function(t) {
					e._handlers[t] = T(ra[t], e)
				}), E(ta, function(t) {
					e._handlers[t] = function(t, e) {
						return function() {
							if (!e._touching) return t.apply(e, arguments)
						}
					}(ra[t], e)
				})
			}(this), v.pointerEventsSupported ? t(na, this) : (v.touchEventsSupported && t(ea, this), t(ta, this))
	}
	E(["click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu"], function(e) {
		ra[e] = function(t) {
			t = Vt(this.dom, t), this.trigger(e, t)
		}
	});
	var ua = la.prototype;
	ua.dispose = function() {
		for (var t, e, i, n = ta.concat(ea), a = 0; a < n.length; a++) {
			var o = n[a];
			t = this.dom, e = aa(o), i = this._handlers[o], Nt ? t.removeEventListener(e, i) : t.detachEvent("on" + e, i)
		}
	}, ua.setCursor = function(t) {
		this.dom.style && (this.dom.style.cursor = t || "default")
	}, b(la, Ct);
	var ha = !v.canvasSupported,
		ca = {
			canvas: Jn
		},
		da = {};

	function fa(t, e) {
		var i = new ga(n(), t, e);
		return da[i.id] = i
	}

	function pa(t, e) {
		ca[t] = e
	}
	var ga = function(t, e, i) {
		i = i || {}, this.dom = e, this.id = t;
		var n = this,
			a = new Ni,
			o = i.renderer;
		if (ha) {
			if (!ca.vml) throw new Error("You need to require 'zrender/vml/vml' to support IE8");
			o = "vml"
		} else o && ca[o] || (o = "canvas");
		var r = new ca[o](e, a, i, t);
		this.storage = a, this.painter = r;
		var s = v.node || v.worker ? null : new la(r.getViewportRoot());
		this.handler = new qt(a, r, s, r.root), this.animation = new Qn({
			stage: {
				update: T(this.flush, this)
			}
		}), this.animation.start(), this._needsRefresh;
		var l = a.delFromStorage,
			u = a.addToStorage;
		a.delFromStorage = function(t) {
			l.call(a, t), t && t.removeSelfFromZr(n)
		}, a.addToStorage = function(t) {
			u.call(a, t), t.addSelfToZr(n)
		}
	};
	ga.prototype = {
		constructor: ga,
		getId: function() {
			return this.id
		},
		add: function(t) {
			this.storage.addRoot(t), this._needsRefresh = !0
		},
		remove: function(t) {
			this.storage.delRoot(t), this._needsRefresh = !0
		},
		configLayer: function(t, e) {
			this.painter.configLayer && this.painter.configLayer(t, e), this._needsRefresh = !0
		},
		setBackgroundColor: function(t) {
			this.painter.setBackgroundColor && this.painter.setBackgroundColor(t), this._needsRefresh = !0
		},
		refreshImmediately: function() {
			this._needsRefresh = this._needsRefreshHover = !1, this.painter.refresh(), this._needsRefresh = this._needsRefreshHover = !
				1
		},
		refresh: function() {
			this._needsRefresh = !0
		},
		flush: function() {
			var t;
			this._needsRefresh && (t = !0, this.refreshImmediately()), this._needsRefreshHover && (t = !0, this.refreshHoverImmediately()),
				t && this.trigger("rendered")
		},
		addHover: function(t, e) {
			if (this.painter.addHover) {
				var i = this.painter.addHover(t, e);
				return this.refreshHover(), i
			}
		},
		removeHover: function(t) {
			this.painter.removeHover && (this.painter.removeHover(t), this.refreshHover())
		},
		clearHover: function() {
			this.painter.clearHover && (this.painter.clearHover(), this.refreshHover())
		},
		refreshHover: function() {
			this._needsRefreshHover = !0
		},
		refreshHoverImmediately: function() {
			this._needsRefreshHover = !1, this.painter.refreshHover && this.painter.refreshHover()
		},
		resize: function(t) {
			t = t || {}, this.painter.resize(t.width, t.height), this.handler.resize()
		},
		clearAnimation: function() {
			this.animation.clear()
		},
		getWidth: function() {
			return this.painter.getWidth()
		},
		getHeight: function() {
			return this.painter.getHeight()
		},
		pathToImage: function(t, e) {
			return this.painter.pathToImage(t, e)
		},
		setCursorStyle: function(t) {
			this.handler.setCursorStyle(t)
		},
		findHover: function(t, e) {
			return this.handler.findHover(t, e)
		},
		on: function(t, e, i) {
			this.handler.on(t, e, i)
		},
		off: function(t, e) {
			this.handler.off(t, e)
		},
		trigger: function(t, e) {
			this.handler.trigger(t, e)
		},
		clear: function() {
			this.storage.delRoot(), this.painter.clear()
		},
		dispose: function() {
			this.animation.stop(), this.clear(), this.storage.dispose(), this.painter.dispose(), this.handler.dispose(), this
				.animation = this.storage = this.painter = this.handler = null,
				function(t) {
					delete da[t]
				}(this.id)
		}
	};
	var ma = (Object.freeze || Object)({
			version: "4.1.2",
			init: fa,
			dispose: function(t) {
				if (t) t.dispose();
				else {
					for (var e in da) da.hasOwnProperty(e) && da[e].dispose();
					da = {}
				}
				return this
			},
			getInstance: function(t) {
				return da[t]
			},
			registerPainter: pa
		}),
		va = E,
		ya = z,
		xa = k,
		_a = "series\0";

	function wa(t) {
		return t instanceof Array ? t : null == t ? [] : [t]
	}

	function ba(t, e, i) {
		if (t) {
			t[e] = t[e] || {}, t.emphasis = t.emphasis || {}, t.emphasis[e] = t.emphasis[e] || {};
			for (var n = 0, a = i.length; n < a; n++) {
				var o = i[n];
				!t.emphasis[e].hasOwnProperty(o) && t[e].hasOwnProperty(o) && (t.emphasis[e][o] = t[e][o])
			}
		}
	}
	var Sa = ["fontStyle", "fontWeight", "fontSize", "fontFamily", "rich", "tag", "color", "textBorderColor",
		"textBorderWidth", "width", "height", "lineHeight", "align", "verticalAlign", "baseline", "shadowColor",
		"shadowBlur", "shadowOffsetX", "shadowOffsetY", "textShadowColor", "textShadowBlur", "textShadowOffsetX",
		"textShadowOffsetY", "backgroundColor", "borderColor", "borderWidth", "borderRadius", "padding"
	];

	function Ma(t) {
		return !ya(t) || xa(t) || t instanceof Date ? t : t.value
	}

	function Ia(t, a) {
		a = (a || []).slice();
		var o = N(t || [], function(t, e) {
			return {
				exist: t
			}
		});
		return va(a, function(t, e) {
			if (ya(t)) {
				for (var i = 0; i < o.length; i++)
					if (!o[i].option && null != t.id && o[i].exist.id === t.id + "") return o[i].option = t, void(a[e] = null);
				for (i = 0; i < o.length; i++) {
					var n = o[i].exist;
					if (!(o[i].option || null != n.id && null != t.id || null == t.name || Da(t) || Da(n) || n.name !== t.name + ""))
						return o[i].option = t, void(a[e] = null)
				}
			}
		}), va(a, function(t, e) {
			if (ya(t)) {
				for (var i = 0; i < o.length; i++) {
					var n = o[i].exist;
					if (!o[i].option && !Da(n) && null == t.id) {
						o[i].option = t;
						break
					}
				}
				i >= o.length && o.push({
					option: t
				})
			}
		}), o
	}

	function Aa(t) {
		var r = Q();
		va(t, function(t, e) {
			var i = t.exist;
			i && r.set(i.id, t)
		}), va(t, function(t, e) {
			var i = t.option;
			Y(!i || null == i.id || !r.get(i.id) || r.get(i.id) === t, "id duplicates: " + (i && i.id)), i && null != i.id &&
				r.set(i.id, t), t.keyInfo || (t.keyInfo = {})
		}), va(t, function(t, e) {
			var i = t.exist,
				n = t.option,
				a = t.keyInfo;
			if (ya(n)) {
				if (a.name = null != n.name ? n.name + "" : i ? i.name : _a + e, i) a.id = i.id;
				else if (null != n.id) a.id = n.id + "";
				else
					for (var o = 0; a.id = "\0" + a.name + "\0" + o++, r.get(a.id););
				r.set(a.id, t)
			}
		})
	}

	function Ta(t) {
		var e = t.name;
		return !(!e || !e.indexOf(_a))
	}

	function Da(t) {
		return ya(t) && t.id && 0 === (t.id + "").indexOf("\0_ec_\0")
	}

	function Ca(e, t) {
		return null != t.dataIndexInside ? t.dataIndexInside : null != t.dataIndex ? k(t.dataIndex) ? N(t.dataIndex,
			function(t) {
				return e.indexOfRawIndex(t)
			}) : e.indexOfRawIndex(t.dataIndex) : null != t.name ? k(t.name) ? N(t.name, function(t) {
			return e.indexOfName(t)
		}) : e.indexOfName(t.name) : void 0
	}

	function La() {
		var e = "__\0ec_inner_" + ka++ + "_" + Math.random().toFixed(5);
		return function(t) {
			return t[e] || (t[e] = {})
		}
	}
	var ka = 0;

	function Pa(s, l, u) {
		if (R(l)) {
			var t = {};
			t[l + "Index"] = 0, l = t
		}
		var e = u && u.defaultMainType;
		!e || Na(l, e + "Index") || Na(l, e + "Id") || Na(l, e + "Name") || (l[e + "Index"] = 0);
		var h = {};
		return va(l, function(t, e) {
			t = l[e];
			if ("dataIndex" !== e && "dataIndexInside" !== e) {
				var i = e.match(/^(\w+)(Index|Id|Name)$/) || [],
					n = i[1],
					a = (i[2] || "").toLowerCase();
				if (!(!n || !a || null == t || "index" === a && "none" === t || u && u.includeMainTypes && _(u.includeMainTypes,
						n) < 0)) {
					var o = {
						mainType: n
					};
					"index" === a && "all" === t || (o[a] = t);
					var r = s.queryComponents(o);
					h[n + "Models"] = r, h[n + "Model"] = r[0]
				}
			} else h[e] = t
		}), h
	}

	function Na(t, e) {
		return t && t.hasOwnProperty(e)
	}

	function Oa(t, e, i) {
		t.setAttribute ? t.setAttribute(e, i) : t[e] = i
	}

	function Ea(t) {
		return "auto" === t ? v.domSupported ? "html" : "richText" : t || "html"
	}

	function Ra(t, i) {
		var n = Q(),
			a = [];
		return E(t, function(t) {
			var e = i(t);
			(n.get(e) || (a.push(e), n.set(e, []))).push(t)
		}), {
			keys: a,
			buckets: n
		}
	}
	var za = ".",
		Ba = "___EC__COMPONENT__CONTAINER___";

	function Va(t) {
		var e = {
			main: "",
			sub: ""
		};
		return t && (t = t.split(za), e.main = t[0] || "", e.sub = t[1] || ""), e
	}

	function Ga(t) {
		(t.$constructor = t).extend = function(t) {
			function e() {
				t.$constructor ? t.$constructor.apply(this, arguments) : i.apply(this, arguments)
			}
			var i = this;
			return L(e.prototype, t), e.extend = this.extend, e.superCall = Ha, e.superApply = Za, w(e, this), e.superClass =
				i, e
		}
	}
	var Fa = 0;

	function Wa(t) {
		var e = ["__\0is_clz", Fa++, Math.random().toFixed(3)].join("_");
		t.prototype[e] = !0, t.isInstance = function(t) {
			return !(!t || !t[e])
		}
	}

	function Ha(t, e) {
		var i = U(arguments, 2);
		return this.superClass.prototype[e].apply(t, i)
	}

	function Za(t, e, i) {
		return this.superClass.prototype[e].apply(t, i)
	}

	function Ua(i, t) {
		t = t || {};
		var a = {};
		if (i.registerClass = function(t, e) {
				if (e)
					if (function(t) {
							Y(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t), 'componentType "' + t + '" illegal')
						}(e), (e = Va(e)).sub) {
						if (e.sub !== Ba) {
							(function(t) {
								var e = a[t.main];
								e && e[Ba] || ((e = a[t.main] = {})[Ba] = !0);
								return e
							})(e)[e.sub] = t
						}
					} else a[e.main] = t;
				return t
			}, i.getClass = function(t, e, i) {
				var n = a[t];
				if (n && n[Ba] && (n = e ? n[e] : null), i && !n) throw new Error(e ? "Component " + t + "." + (e || "") +
					" not exists. Load it first." : t + ".type should be specified.");
				return n
			}, i.getClassesByMainType = function(t) {
				t = Va(t);
				var i = [],
					e = a[t.main];
				return e && e[Ba] ? E(e, function(t, e) {
					e !== Ba && i.push(t)
				}) : i.push(e), i
			}, i.hasClass = function(t) {
				return t = Va(t), !!a[t.main]
			}, i.getAllClassMainTypes = function() {
				var i = [];
				return E(a, function(t, e) {
					i.push(e)
				}), i
			}, i.hasSubTypes = function(t) {
				t = Va(t);
				var e = a[t.main];
				return e && e[Ba]
			}, i.parseClassType = Va, t.registerWhenExtend) {
			var n = i.extend;
			n && (i.extend = function(t) {
				var e = n.call(this, t);
				return i.registerClass(e, t.type)
			})
		}
		return i
	}

	function Xa(s) {
		for (var t = 0; t < s.length; t++) s[t][1] || (s[t][1] = s[t][0]);
		return function(t, e, i) {
			for (var n = {}, a = 0; a < s.length; a++) {
				var o = s[a][1];
				if (!(e && 0 <= _(e, o) || i && _(i, o) < 0)) {
					var r = t.getShallow(o);
					null != r && (n[s[a][0]] = r)
				}
			}
			return n
		}
	}
	var Ya = Xa([
			["lineWidth", "width"],
			["stroke", "color"],
			["opacity"],
			["shadowBlur"],
			["shadowOffsetX"],
			["shadowOffsetY"],
			["shadowColor"]
		]),
		ja = {
			getLineStyle: function(t) {
				var e = Ya(this, t);
				return e.lineDash = this.getLineDash(e.lineWidth), e
			},
			getLineDash: function(t) {
				null == t && (t = 1);
				var e = this.get("type"),
					i = Math.max(t, 2),
					n = 4 * t;
				return "solid" !== e && null != e && ("dashed" === e ? [n, n] : [i, i])
			}
		},
		qa = Xa([
			["fill", "color"],
			["shadowBlur"],
			["shadowOffsetX"],
			["shadowOffsetY"],
			["opacity"],
			["shadowColor"]
		]),
		Ka = {
			getAreaStyle: function(t, e) {
				return qa(this, t, e)
			}
		},
		$a = Math.pow,
		Ja = Math.sqrt,
		Qa = 1e-8,
		to = 1e-4,
		eo = Ja(3),
		io = 1 / 3,
		no = at(),
		ao = at(),
		oo = at();

	function ro(t) {
		return -Qa < t && t < Qa
	}

	function so(t) {
		return Qa < t || t < -Qa
	}

	function lo(t, e, i, n, a) {
		var o = 1 - a;
		return o * o * (o * t + 3 * a * e) + a * a * (a * n + 3 * o * i)
	}

	function uo(t, e, i, n, a) {
		var o = 1 - a;
		return 3 * (((e - t) * o + 2 * (i - e) * a) * o + (n - i) * a * a)
	}

	function ho(t, e, i, n, a) {
		var o = 6 * i - 12 * e + 6 * t,
			r = 9 * e + 3 * n - 3 * t - 9 * i,
			s = 3 * e - 3 * t,
			l = 0;
		if (ro(r)) {
			if (so(o)) 0 <= (h = -s / o) && h <= 1 && (a[l++] = h)
		} else {
			var u = o * o - 4 * r * s;
			if (ro(u)) a[0] = -o / (2 * r);
			else if (0 < u) {
				var h, c = Ja(u),
					d = (-o - c) / (2 * r);
				0 <= (h = (-o + c) / (2 * r)) && h <= 1 && (a[l++] = h), 0 <= d && d <= 1 && (a[l++] = d)
			}
		}
		return l
	}

	function co(t, e, i, n, a, o) {
		var r = (e - t) * a + t,
			s = (i - e) * a + e,
			l = (n - i) * a + i,
			u = (s - r) * a + r,
			h = (l - s) * a + s,
			c = (h - u) * a + u;
		o[0] = t, o[1] = r, o[2] = u, o[3] = c, o[4] = c, o[5] = h, o[6] = l, o[7] = n
	}

	function fo(t, e, i, n) {
		var a = 1 - n;
		return a * (a * t + 2 * n * e) + n * n * i
	}

	function po(t, e, i, n) {
		return 2 * ((1 - n) * (e - t) + n * (i - e))
	}

	function go(t, e, i) {
		var n = t + i - 2 * e;
		return 0 == n ? .5 : (t - e) / n
	}

	function mo(t, e, i, n, a) {
		var o = (e - t) * n + t,
			r = (i - e) * n + e,
			s = (r - o) * n + o;
		a[0] = t, a[1] = o, a[2] = s, a[3] = s, a[4] = r, a[5] = i
	}
	var vo = Math.min,
		yo = Math.max,
		xo = Math.sin,
		_o = Math.cos,
		wo = 2 * Math.PI,
		bo = at(),
		So = at(),
		Mo = at();

	function Io(t, e, i) {
		if (0 !== t.length) {
			var n, a = t[0],
				o = a[0],
				r = a[0],
				s = a[1],
				l = a[1];
			for (n = 1; n < t.length; n++) a = t[n], o = vo(o, a[0]), r = yo(r, a[0]), s = vo(s, a[1]), l = yo(l, a[1]);
			e[0] = o, e[1] = s, i[0] = r, i[1] = l
		}
	}

	function Ao(t, e, i, n, a, o) {
		a[0] = vo(t, i), a[1] = vo(e, n), o[0] = yo(t, i), o[1] = yo(e, n)
	}
	var To = [],
		Do = [];

	function Co(t, e, i, n, a, o, r, s, l, u) {
		var h, c = ho,
			d = lo,
			f = c(t, i, a, r, To);
		for (l[0] = 1 / 0, l[1] = 1 / 0, u[0] = -1 / 0, u[1] = -1 / 0, h = 0; h < f; h++) {
			var p = d(t, i, a, r, To[h]);
			l[0] = vo(p, l[0]), u[0] = yo(p, u[0])
		}
		for (f = c(e, n, o, s, Do), h = 0; h < f; h++) {
			var g = d(e, n, o, s, Do[h]);
			l[1] = vo(g, l[1]), u[1] = yo(g, u[1])
		}
		l[0] = vo(t, l[0]), u[0] = yo(t, u[0]), l[0] = vo(r, l[0]), u[0] = yo(r, u[0]), l[1] = vo(e, l[1]), u[1] = yo(e, u[1]),
			l[1] = vo(s, l[1]), u[1] = yo(s, u[1])
	}

	function Lo(t, e, i, n, a, o, r, s, l) {
		var u = St,
			h = Mt,
			c = Math.abs(a - o);
		if (c % wo < 1e-4 && 1e-4 < c) return s[0] = t - i, s[1] = e - n, l[0] = t + i, void(l[1] = e + n);
		if (bo[0] = _o(a) * i + t, bo[1] = xo(a) * n + e, So[0] = _o(o) * i + t, So[1] = xo(o) * n + e, u(s, bo, So), h(l,
				bo, So), (a %= wo) < 0 && (a += wo), (o %= wo) < 0 && (o += wo), o < a && !r ? o += wo : a < o && r && (a += wo),
			r) {
			var d = o;
			o = a, a = d
		}
		for (var f = 0; f < o; f += Math.PI / 2) a < f && (Mo[0] = _o(f) * i + t, Mo[1] = xo(f) * n + e, u(s, Mo, s), h(l,
			Mo, l))
	}
	var ko = {
			M: 1,
			L: 2,
			C: 3,
			Q: 4,
			A: 5,
			Z: 6,
			R: 7
		},
		Po = [],
		No = [],
		Oo = [],
		Eo = [],
		Ro = Math.min,
		zo = Math.max,
		Bo = Math.cos,
		Vo = Math.sin,
		Go = Math.sqrt,
		Fo = Math.abs,
		Wo = "undefined" != typeof Float32Array,
		Ho = function(t) {
			this._saveData = !t, this._saveData && (this.data = []), this._ctx = null
		};

	function Zo(t, e, i, n, a, o, r) {
		if (0 === a) return !1;
		var s = a,
			l = 0;
		if (e + s < r && n + s < r || r < e - s && r < n - s || t + s < o && i + s < o || o < t - s && o < i - s) return !1;
		if (t === i) return Math.abs(o - t) <= s / 2;
		var u = (l = (e - n) / (t - i)) * o - r + (t * n - i * e) / (t - i);
		return u * u / (l * l + 1) <= s / 2 * s / 2
	}

	function Uo(t, e, i, n, a, o, r, s, l, u, h) {
		if (0 === l) return !1;
		var c = l;
		return !(e + c < h && n + c < h && o + c < h && s + c < h || h < e - c && h < n - c && h < o - c && h < s - c || t +
			c < u && i + c < u && a + c < u && r + c < u || u < t - c && u < i - c && u < a - c && u < r - c) && function(t, e,
			i, n, a, o, r, s, l, u, h) {
			var c, d, f, p, g, m = .005,
				v = 1 / 0;
			no[0] = l, no[1] = u;
			for (var y = 0; y < 1; y += .05) ao[0] = lo(t, i, a, r, y), ao[1] = lo(e, n, o, s, y), (p = _t(no, ao)) < v && (c =
				y, v = p);
			v = 1 / 0;
			for (var x = 0; x < 32 && !(m < to); x++) d = c - m, f = c + m, ao[0] = lo(t, i, a, r, d), ao[1] = lo(e, n, o, s,
				d), p = _t(ao, no), 0 <= d && p < v ? (c = d, v = p) : (oo[0] = lo(t, i, a, r, f), oo[1] = lo(e, n, o, s, f), g =
				_t(oo, no), f <= 1 && g < v ? (c = f, v = g) : m *= .5);
			return h && (h[0] = lo(t, i, a, r, c), h[1] = lo(e, n, o, s, c)), Ja(v)
		}(t, e, i, n, a, o, r, s, u, h, null) <= c / 2
	}

	function Xo(t, e, i, n, a, o, r, s, l) {
		if (0 === r) return !1;
		var u = r;
		return !(e + u < l && n + u < l && o + u < l || l < e - u && l < n - u && l < o - u || t + u < s && i + u < s && a +
			u < s || s < t - u && s < i - u && s < a - u) && function(t, e, i, n, a, o, r, s, l) {
			var u, h = .005,
				c = 1 / 0;
			no[0] = r, no[1] = s;
			for (var d = 0; d < 1; d += .05) {
				ao[0] = fo(t, i, a, d), ao[1] = fo(e, n, o, d), (m = _t(no, ao)) < c && (u = d, c = m)
			}
			c = 1 / 0;
			for (var f = 0; f < 32 && !(h < to); f++) {
				var p = u - h,
					g = u + h;
				ao[0] = fo(t, i, a, p), ao[1] = fo(e, n, o, p);
				var m = _t(ao, no);
				if (0 <= p && m < c) u = p, c = m;
				else {
					oo[0] = fo(t, i, a, g), oo[1] = fo(e, n, o, g);
					var v = _t(oo, no);
					g <= 1 && v < c ? (u = g, c = v) : h *= .5
				}
			}
			return l && (l[0] = fo(t, i, a, u), l[1] = fo(e, n, o, u)), Ja(c)
		}(t, e, i, n, a, o, s, l, null) <= u / 2
	}
	Ho.prototype = {
		constructor: Ho,
		_xi: 0,
		_yi: 0,
		_x0: 0,
		_y0: 0,
		_ux: 0,
		_uy: 0,
		_len: 0,
		_lineDash: null,
		_dashOffset: 0,
		_dashIdx: 0,
		_dashSum: 0,
		setScale: function(t, e, i) {
			i = i || 0, this._ux = Fo(i / li / t) || 0, this._uy = Fo(i / li / e) || 0
		},
		getContext: function() {
			return this._ctx
		},
		beginPath: function(t) {
			return (this._ctx = t) && t.beginPath(), t && (this.dpr = t.dpr), this._saveData && (this._len = 0), this._lineDash &&
				(this._lineDash = null, this._dashOffset = 0), this
		},
		moveTo: function(t, e) {
			return this.addData(ko.M, t, e), this._ctx && this._ctx.moveTo(t, e), this._x0 = t, this._y0 = e, this._xi = t,
				this._yi = e, this
		},
		lineTo: function(t, e) {
			var i = Fo(t - this._xi) > this._ux || Fo(e - this._yi) > this._uy || this._len < 5;
			return this.addData(ko.L, t, e), this._ctx && i && (this._needsDash() ? this._dashedLineTo(t, e) : this._ctx.lineTo(
				t, e)), i && (this._xi = t, this._yi = e), this
		},
		bezierCurveTo: function(t, e, i, n, a, o) {
			return this.addData(ko.C, t, e, i, n, a, o), this._ctx && (this._needsDash() ? this._dashedBezierTo(t, e, i, n, a,
				o) : this._ctx.bezierCurveTo(t, e, i, n, a, o)), this._xi = a, this._yi = o, this
		},
		quadraticCurveTo: function(t, e, i, n) {
			return this.addData(ko.Q, t, e, i, n), this._ctx && (this._needsDash() ? this._dashedQuadraticTo(t, e, i, n) :
				this._ctx.quadraticCurveTo(t, e, i, n)), this._xi = i, this._yi = n, this
		},
		arc: function(t, e, i, n, a, o) {
			return this.addData(ko.A, t, e, i, i, n, a - n, 0, o ? 0 : 1), this._ctx && this._ctx.arc(t, e, i, n, a, o), this
				._xi = Bo(a) * i + t, this._yi = Vo(a) * i + e, this
		},
		arcTo: function(t, e, i, n, a) {
			return this._ctx && this._ctx.arcTo(t, e, i, n, a), this
		},
		rect: function(t, e, i, n) {
			return this._ctx && this._ctx.rect(t, e, i, n), this.addData(ko.R, t, e, i, n), this
		},
		closePath: function() {
			this.addData(ko.Z);
			var t = this._ctx,
				e = this._x0,
				i = this._y0;
			return t && (this._needsDash() && this._dashedLineTo(e, i), t.closePath()), this._xi = e, this._yi = i, this
		},
		fill: function(t) {
			t && t.fill(), this.toStatic()
		},
		stroke: function(t) {
			t && t.stroke(), this.toStatic()
		},
		setLineDash: function(t) {
			if (t instanceof Array) {
				this._lineDash = t;
				for (var e = this._dashIdx = 0, i = 0; i < t.length; i++) e += t[i];
				this._dashSum = e
			}
			return this
		},
		setLineDashOffset: function(t) {
			return this._dashOffset = t, this
		},
		len: function() {
			return this._len
		},
		setData: function(t) {
			var e = t.length;
			this.data && this.data.length === e || !Wo || (this.data = new Float32Array(e));
			for (var i = 0; i < e; i++) this.data[i] = t[i];
			this._len = e
		},
		appendPath: function(t) {
			t instanceof Array || (t = [t]);
			for (var e = t.length, i = 0, n = this._len, a = 0; a < e; a++) i += t[a].len();
			Wo && this.data instanceof Float32Array && (this.data = new Float32Array(n + i));
			for (a = 0; a < e; a++)
				for (var o = t[a].data, r = 0; r < o.length; r++) this.data[n++] = o[r];
			this._len = n
		},
		addData: function(t) {
			if (this._saveData) {
				var e = this.data;
				this._len + arguments.length > e.length && (this._expandData(), e = this.data);
				for (var i = 0; i < arguments.length; i++) e[this._len++] = arguments[i];
				this._prevCmd = t
			}
		},
		_expandData: function() {
			if (!(this.data instanceof Array)) {
				for (var t = [], e = 0; e < this._len; e++) t[e] = this.data[e];
				this.data = t
			}
		},
		_needsDash: function() {
			return this._lineDash
		},
		_dashedLineTo: function(t, e) {
			var i, n, a = this._dashSum,
				o = this._dashOffset,
				r = this._lineDash,
				s = this._ctx,
				l = this._xi,
				u = this._yi,
				h = t - l,
				c = e - u,
				d = Go(h * h + c * c),
				f = l,
				p = u,
				g = r.length;
			for (o < 0 && (o = a + o), f -= (o %= a) * (h /= d), p -= o * (c /= d); 0 < h && f <= t || h < 0 && t <= f || 0 ===
				h && (0 < c && p <= e || c < 0 && e <= p);) f += h * (i = r[n = this._dashIdx]), p += c * i, this._dashIdx = (n +
				1) % g, 0 < h && f < l || h < 0 && l < f || 0 < c && p < u || c < 0 && u < p || s[n % 2 ? "moveTo" : "lineTo"](
				0 <= h ? Ro(f, t) : zo(f, t), 0 <= c ? Ro(p, e) : zo(p, e));
			h = f - t, c = p - e, this._dashOffset = -Go(h * h + c * c)
		},
		_dashedBezierTo: function(t, e, i, n, a, o) {
			var r, s, l, u, h, c = this._dashSum,
				d = this._dashOffset,
				f = this._lineDash,
				p = this._ctx,
				g = this._xi,
				m = this._yi,
				v = lo,
				y = 0,
				x = this._dashIdx,
				_ = f.length,
				w = 0;
			for (d < 0 && (d = c + d), d %= c, r = 0; r < 1; r += .1) s = v(g, t, i, a, r + .1) - v(g, t, i, a, r), l = v(m,
				e, n, o, r + .1) - v(m, e, n, o, r), y += Go(s * s + l * l);
			for (; x < _ && !(d < (w += f[x])); x++);
			for (r = (w - d) / y; r <= 1;) u = v(g, t, i, a, r), h = v(m, e, n, o, r), x % 2 ? p.moveTo(u, h) : p.lineTo(u, h),
				r += f[x] / y, x = (x + 1) % _;
			x % 2 != 0 && p.lineTo(a, o), s = a - u, l = o - h, this._dashOffset = -Go(s * s + l * l)
		},
		_dashedQuadraticTo: function(t, e, i, n) {
			var a = i,
				o = n;
			i = (i + 2 * t) / 3, n = (n + 2 * e) / 3, t = (this._xi + 2 * t) / 3, e = (this._yi + 2 * e) / 3, this._dashedBezierTo(
				t, e, i, n, a, o)
		},
		toStatic: function() {
			var t = this.data;
			t instanceof Array && (t.length = this._len, Wo && (this.data = new Float32Array(t)))
		},
		getBoundingRect: function() {
			Po[0] = Po[1] = Oo[0] = Oo[1] = Number.MAX_VALUE, No[0] = No[1] = Eo[0] = Eo[1] = -Number.MAX_VALUE;
			for (var t, e, i, n, a, o, r, s, l, u, h, c, d, f, p = this.data, g = 0, m = 0, v = 0, y = 0, x = 0; x < p.length;) {
				var _ = p[x++];
				switch (1 === x && (v = g = p[x], y = m = p[x + 1]), _) {
					case ko.M:
						g = v = p[x++], m = y = p[x++], Oo[0] = v, Oo[1] = y, Eo[0] = v, Eo[1] = y;
						break;
					case ko.L:
						Ao(g, m, p[x], p[x + 1], Oo, Eo), g = p[x++], m = p[x++];
						break;
					case ko.C:
						Co(g, m, p[x++], p[x++], p[x++], p[x++], p[x], p[x + 1], Oo, Eo), g = p[x++], m = p[x++];
						break;
					case ko.Q:
						t = g, e = m, i = p[x++], n = p[x++], a = p[x], o = p[x + 1], r = Oo, s = Eo, u = l = void 0, u = fo, h = yo(
							vo((l = go)(t, i, a), 1), 0), c = yo(vo(l(e, n, o), 1), 0), d = u(t, i, a, h), f = u(e, n, o, c), r[0] = vo(
							t, a, d), r[1] = vo(e, o, f), s[0] = yo(t, a, d), s[1] = yo(e, o, f), g = p[x++], m = p[x++];
						break;
					case ko.A:
						var w = p[x++],
							b = p[x++],
							S = p[x++],
							M = p[x++],
							I = p[x++],
							A = p[x++] + I;
						x += 1;
						var T = 1 - p[x++];
						1 === x && (v = Bo(I) * S + w, y = Vo(I) * M + b), Lo(w, b, S, M, I, A, T, Oo, Eo), g = Bo(A) * S + w, m = Vo(
							A) * M + b;
						break;
					case ko.R:
						Ao(v = g = p[x++], y = m = p[x++], v + p[x++], y + p[x++], Oo, Eo);
						break;
					case ko.Z:
						g = v, m = y
				}
				St(Po, Po, Oo), Mt(No, No, Eo)
			}
			return 0 === x && (Po[0] = Po[1] = No[0] = No[1] = 0), new bi(Po[0], Po[1], No[0] - Po[0], No[1] - Po[1])
		},
		rebuildPath: function(t) {
			for (var e, i, n, a, o, r, s = this.data, l = this._ux, u = this._uy, h = this._len, c = 0; c < h;) {
				var d = s[c++];
				switch (1 === c && (e = n = s[c], i = a = s[c + 1]), d) {
					case ko.M:
						e = n = s[c++], i = a = s[c++], t.moveTo(n, a);
						break;
					case ko.L:
						o = s[c++], r = s[c++], (Fo(o - n) > l || Fo(r - a) > u || c === h - 1) && (t.lineTo(o, r), n = o, a = r);
						break;
					case ko.C:
						t.bezierCurveTo(s[c++], s[c++], s[c++], s[c++], s[c++], s[c++]), n = s[c - 2], a = s[c - 1];
						break;
					case ko.Q:
						t.quadraticCurveTo(s[c++], s[c++], s[c++], s[c++]), n = s[c - 2], a = s[c - 1];
						break;
					case ko.A:
						var f = s[c++],
							p = s[c++],
							g = s[c++],
							m = s[c++],
							v = s[c++],
							y = s[c++],
							x = s[c++],
							_ = s[c++],
							w = m < g ? g : m,
							b = m < g ? 1 : g / m,
							S = m < g ? m / g : 1,
							M = v + y;
						.001 < Math.abs(g - m) ? (t.translate(f, p), t.rotate(x), t.scale(b, S), t.arc(0, 0, w, v, M, 1 - _), t.scale(
							1 / b, 1 / S), t.rotate(-x), t.translate(-f, -p)) : t.arc(f, p, w, v, M, 1 - _), 1 === c && (e = Bo(v) * g +
							f, i = Vo(v) * m + p), n = Bo(M) * g + f, a = Vo(M) * m + p;
						break;
					case ko.R:
						e = n = s[c], i = a = s[c + 1], t.rect(s[c++], s[c++], s[c++], s[c++]);
						break;
					case ko.Z:
						t.closePath(), n = e, a = i
				}
			}
		}
	}, Ho.CMD = ko;
	var Yo = 2 * Math.PI;

	function jo(t) {
		return (t %= Yo) < 0 && (t += Yo), t
	}
	var qo = 2 * Math.PI;

	function Ko(t, e, i, n, a, o, r, s, l) {
		if (0 === r) return !1;
		var u = r;
		s -= t, l -= e;
		var h = Math.sqrt(s * s + l * l);
		if (i < h - u || h + u < i) return !1;
		if (Math.abs(n - a) % qo < 1e-4) return !0;
		if (o) {
			var c = n;
			n = jo(a), a = jo(c)
		} else n = jo(n), a = jo(a);
		a < n && (a += qo);
		var d = Math.atan2(l, s);
		return d < 0 && (d += qo), n <= d && d <= a || n <= d + qo && d + qo <= a
	}

	function $o(t, e, i, n, a, o) {
		if (e < o && n < o || o < e && o < n) return 0;
		if (n === e) return 0;
		var r = n < e ? 1 : -1,
			s = (o - e) / (n - e);
		1 != s && 0 != s || (r = n < e ? .5 : -.5);
		var l = s * (i - t) + t;
		return l === a ? 1 / 0 : a < l ? r : 0
	}
	var Jo = Ho.CMD,
		Qo = 2 * Math.PI,
		tr = 1e-4;
	var er = [-1, -1, -1],
		ir = [-1, -1];

	function nr(t, e, i, n, a, o, r, s, l, u) {
		if (e < u && n < u && o < u && s < u || u < e && u < n && u < o && u < s) return 0;
		var h, c = function(t, e, i, n, a, o) {
			var r = n + 3 * (e - i) - t,
				s = 3 * (i - 2 * e + t),
				l = 3 * (e - t),
				u = t - a,
				h = s * s - 3 * r * l,
				c = s * l - 9 * r * u,
				d = l * l - 3 * s * u,
				f = 0;
			if (ro(h) && ro(c)) {
				if (ro(s)) o[0] = 0;
				else 0 <= (M = -l / s) && M <= 1 && (o[f++] = M)
			} else {
				var p = c * c - 4 * h * d;
				if (ro(p)) {
					var g = c / h,
						m = -g / 2;
					0 <= (M = -s / r + g) && M <= 1 && (o[f++] = M), 0 <= m && m <= 1 && (o[f++] = m)
				} else if (0 < p) {
					var v = Ja(p),
						y = h * s + 1.5 * r * (-c + v),
						x = h * s + 1.5 * r * (-c - v);
					0 <= (M = (-s - ((y = y < 0 ? -$a(-y, io) : $a(y, io)) + (x = x < 0 ? -$a(-x, io) : $a(x, io)))) / (3 * r)) && M <=
						1 && (o[f++] = M)
				} else {
					var _ = (2 * h * s - 3 * r * c) / (2 * Ja(h * h * h)),
						w = Math.acos(_) / 3,
						b = Ja(h),
						S = Math.cos(w),
						M = (-s - 2 * b * S) / (3 * r),
						I = (m = (-s + b * (S + eo * Math.sin(w))) / (3 * r), (-s + b * (S - eo * Math.sin(w))) / (3 * r));
					0 <= M && M <= 1 && (o[f++] = M), 0 <= m && m <= 1 && (o[f++] = m), 0 <= I && I <= 1 && (o[f++] = I)
				}
			}
			return f
		}(e, n, o, s, u, er);
		if (0 === c) return 0;
		for (var d, f, p = 0, g = -1, m = 0; m < c; m++) {
			var v = er[m],
				y = 0 === v || 1 === v ? .5 : 1;
			lo(t, i, a, r, v) < l || (g < 0 && (g = ho(e, n, o, s, ir), ir[1] < ir[0] && 1 < g && (void 0, h = ir[0], ir[0] =
					ir[1], ir[1] = h), d = lo(e, n, o, s, ir[0]), 1 < g && (f = lo(e, n, o, s, ir[1]))), 2 === g ? v < ir[0] ? p +=
				d < e ? y : -y : v < ir[1] ? p += f < d ? y : -y : p += s < f ? y : -y : v < ir[0] ? p += d < e ? y : -y : p += s <
				d ? y : -y)
		}
		return p
	}

	function ar(t, e, i, n, a, o, r, s) {
		if (e < s && n < s && o < s || s < e && s < n && s < o) return 0;
		var l = function(t, e, i, n, a) {
			var o = t - 2 * e + i,
				r = 2 * (e - t),
				s = t - n,
				l = 0;
			if (ro(o)) {
				if (so(r)) 0 <= (h = -s / r) && h <= 1 && (a[l++] = h)
			} else {
				var u = r * r - 4 * o * s;
				if (ro(u)) 0 <= (h = -r / (2 * o)) && h <= 1 && (a[l++] = h);
				else if (0 < u) {
					var h, c = Ja(u),
						d = (-r - c) / (2 * o);
					0 <= (h = (-r + c) / (2 * o)) && h <= 1 && (a[l++] = h), 0 <= d && d <= 1 && (a[l++] = d)
				}
			}
			return l
		}(e, n, o, s, er);
		if (0 === l) return 0;
		var u = go(e, n, o);
		if (0 <= u && u <= 1) {
			for (var h = 0, c = fo(e, n, o, u), d = 0; d < l; d++) {
				var f = 0 === er[d] || 1 === er[d] ? .5 : 1;
				fo(t, i, a, er[d]) < r || (er[d] < u ? h += c < e ? f : -f : h += o < c ? f : -f)
			}
			return h
		}
		f = 0 === er[0] || 1 === er[0] ? .5 : 1;
		return fo(t, i, a, er[0]) < r ? 0 : o < e ? f : -f
	}

	function or(t, e, i, n, a, o, r, s) {
		if (i < (s -= e) || s < -i) return 0;
		var l = Math.sqrt(i * i - s * s);
		er[0] = -l, er[1] = l;
		var u = Math.abs(n - a);
		if (u < 1e-4) return 0;
		if (u % Qo < 1e-4) {
			a = Qo;
			var h = o ? 1 : -1;
			return r >= er[n = 0] + t && r <= er[1] + t ? h : 0
		}
		if (o) {
			l = n;
			n = jo(a), a = jo(l)
		} else n = jo(n), a = jo(a);
		a < n && (a += Qo);
		for (var c = 0, d = 0; d < 2; d++) {
			var f = er[d];
			if (r < f + t) {
				var p = Math.atan2(s, f);
				h = o ? 1 : -1;
				p < 0 && (p = Qo + p), (n <= p && p <= a || n <= p + Qo && p + Qo <= a) && (p > Math.PI / 2 && p < 1.5 * Math.PI &&
					(h = -h), c += h)
			}
		}
		return c
	}

	function rr(t, e, i, n, a) {
		for (var o = 0, r = 0, s = 0, l = 0, u = 0, h = 0; h < t.length;) {
			var c = t[h++];
			switch (c === Jo.M && 1 < h && (i || (o += $o(r, s, l, u, n, a))), 1 === h && (l = r = t[h], u = s = t[h + 1]), c) {
				case Jo.M:
					r = l = t[h++], s = u = t[h++];
					break;
				case Jo.L:
					if (i) {
						if (Zo(r, s, t[h], t[h + 1], e, n, a)) return !0
					} else o += $o(r, s, t[h], t[h + 1], n, a) || 0;
					r = t[h++], s = t[h++];
					break;
				case Jo.C:
					if (i) {
						if (Uo(r, s, t[h++], t[h++], t[h++], t[h++], t[h], t[h + 1], e, n, a)) return !0
					} else o += nr(r, s, t[h++], t[h++], t[h++], t[h++], t[h], t[h + 1], n, a) || 0;
					r = t[h++], s = t[h++];
					break;
				case Jo.Q:
					if (i) {
						if (Xo(r, s, t[h++], t[h++], t[h], t[h + 1], e, n, a)) return !0
					} else o += ar(r, s, t[h++], t[h++], t[h], t[h + 1], n, a) || 0;
					r = t[h++], s = t[h++];
					break;
				case Jo.A:
					var d = t[h++],
						f = t[h++],
						p = t[h++],
						g = t[h++],
						m = t[h++],
						v = t[h++];
					h += 1;
					var y = 1 - t[h++],
						x = Math.cos(m) * p + d,
						_ = Math.sin(m) * g + f;
					1 < h ? o += $o(r, s, x, _, n, a) : (l = x, u = _);
					var w = (n - d) * g / p + d;
					if (i) {
						if (Ko(d, f, g, m, m + v, y, e, w, a)) return !0
					} else o += or(d, f, g, m, m + v, y, w, a);
					r = Math.cos(m + v) * p + d, s = Math.sin(m + v) * g + f;
					break;
				case Jo.R:
					l = r = t[h++], u = s = t[h++];
					x = l + t[h++], _ = u + t[h++];
					if (i) {
						if (Zo(l, u, x, u, e, n, a) || Zo(x, u, x, _, e, n, a) || Zo(x, _, l, _, e, n, a) || Zo(l, _, l, u, e, n, a))
							return !0
					} else o += $o(x, u, x, _, n, a), o += $o(l, _, l, u, n, a);
					break;
				case Jo.Z:
					if (i) {
						if (Zo(r, s, l, u, e, n, a)) return !0
					} else o += $o(r, s, l, u, n, a);
					r = l, s = u
			}
		}
		return i || function(t, e) {
			return Math.abs(t - e) < tr
		}(s, u) || (o += $o(r, s, l, u, n, a) || 0), 0 !== o
	}
	var sr = Ui.prototype.getCanvasPattern,
		lr = Math.abs,
		ur = new Ho(!0);

	function hr(t) {
		Xn.call(this, t), this.path = null
	}
	hr.prototype = {
		constructor: hr,
		type: "path",
		__dirtyPath: !0,
		strokeContainThreshold: 5,
		segmentIgnoreThreshold: 0,
		subPixelOptimize: !1,
		brush: function(t, e) {
			var i, n = this.style,
				a = this.path || ur,
				o = n.hasStroke(),
				r = n.hasFill(),
				s = n.fill,
				l = n.stroke,
				u = r && !!s.colorStops,
				h = o && !!l.colorStops,
				c = r && !!s.image,
				d = o && !!l.image;
			n.bind(t, this, e), this.setTransform(t), this.__dirty && (u && (i = i || this.getBoundingRect(), this._fillGradient =
				n.getGradient(t, s, i)), h && (i = i || this.getBoundingRect(), this._strokeGradient = n.getGradient(t, l, i)));
			u ? t.fillStyle = this._fillGradient : c && (t.fillStyle = sr.call(s, t)), h ? t.strokeStyle = this._strokeGradient :
				d && (t.strokeStyle = sr.call(l, t));
			var f = n.lineDash,
				p = n.lineDashOffset,
				g = !!t.setLineDash,
				m = this.getGlobalScale();
			if (a.setScale(m[0], m[1], this.segmentIgnoreThreshold), this.__dirtyPath || f && !g && o ? (a.beginPath(t), f &&
					!g && (a.setLineDash(f), a.setLineDashOffset(p)), this.buildPath(a, this.shape, !1), this.path && (this.__dirtyPath = !
						1)) : (t.beginPath(), this.path.rebuildPath(t)), r)
				if (null != n.fillOpacity) {
					var v = t.globalAlpha;
					t.globalAlpha = n.fillOpacity * n.opacity, a.fill(t), t.globalAlpha = v
				} else a.fill(t);
			if (f && g && (t.setLineDash(f), t.lineDashOffset = p), o)
				if (null != n.strokeOpacity) {
					v = t.globalAlpha;
					t.globalAlpha = n.strokeOpacity * n.opacity, a.stroke(t), t.globalAlpha = v
				} else a.stroke(t);
			f && g && t.setLineDash([]), null != n.text && (this.restoreTransform(t), this.drawRectText(t, this.getBoundingRect()))
		},
		buildPath: function(t, e, i) {},
		createPathProxy: function() {
			this.path = new Ho
		},
		getBoundingRect: function() {
			var t = this._rect,
				e = this.style,
				i = !t;
			if (i) {
				var n = this.path;
				n = n || (this.path = new Ho), this.__dirtyPath && (n.beginPath(), this.buildPath(n, this.shape, !1)), t = n.getBoundingRect()
			}
			if (this._rect = t, e.hasStroke()) {
				var a = this._rectWithStroke || (this._rectWithStroke = t.clone());
				if (this.__dirty || i) {
					a.copy(t);
					var o = e.lineWidth,
						r = e.strokeNoScale ? this.getLineScale() : 1;
					e.hasFill() || (o = Math.max(o, this.strokeContainThreshold || 4)), 1e-10 < r && (a.width += o / r, a.height +=
						o / r, a.x -= o / r / 2, a.y -= o / r / 2)
				}
				return a
			}
			return t
		},
		contain: function(t, e) {
			var i = this.transformCoordToLocal(t, e),
				n = this.getBoundingRect(),
				a = this.style;
			if (t = i[0], e = i[1], n.contain(t, e)) {
				var o = this.path.data;
				if (a.hasStroke()) {
					var r = a.lineWidth,
						s = a.strokeNoScale ? this.getLineScale() : 1;
					if (1e-10 < s && (a.hasFill() || (r = Math.max(r, this.strokeContainThreshold)), function(t, e, i, n) {
							return rr(t, e, !0, i, n)
						}(o, r / s, t, e))) return !0
				}
				if (a.hasFill()) return function(t, e, i) {
					return rr(t, 0, !1, e, i)
				}(o, t, e)
			}
			return !1
		},
		dirty: function(t) {
			null == t && (t = !0), t && (this.__dirtyPath = t, this._rect = null), this.__dirty = this.__dirtyText = !0, this
				.__zr && this.__zr.refresh(), this.__clipTarget && this.__clipTarget.dirty()
		},
		animateShape: function(t) {
			return this.animate("shape", t)
		},
		attrKV: function(t, e) {
			"shape" === t ? (this.setShape(e), this.__dirtyPath = !0, this._rect = null) : Xn.prototype.attrKV.call(this, t,
				e)
		},
		setShape: function(t, e) {
			var i = this.shape;
			if (i) {
				if (z(t))
					for (var n in t) t.hasOwnProperty(n) && (i[n] = t[n]);
				else i[t] = e;
				this.dirty(!0)
			}
			return this
		},
		getLineScale: function() {
			var t = this.transform;
			return t && 1e-10 < lr(t[0] - 1) && 1e-10 < lr(t[3] - 1) ? Math.sqrt(lr(t[0] * t[3] - t[2] * t[1])) : 1
		}
	}, hr.extend = function(a) {
		function t(t) {
			hr.call(this, t), a.style && this.style.extendFrom(a.style, !1);
			var e = a.shape;
			if (e) {
				this.shape = this.shape || {};
				var i = this.shape;
				for (var n in e) !i.hasOwnProperty(n) && e.hasOwnProperty(n) && (i[n] = e[n])
			}
			a.init && a.init.call(this, t)
		}
		for (var e in w(t, hr), a) "style" !== e && "shape" !== e && (t.prototype[e] = a[e]);
		return t
	}, w(hr, Xn);

	function cr(t) {
		return Math.sqrt(t[0] * t[0] + t[1] * t[1])
	}
	var dr = Ho.CMD,
		fr = [
			[],
			[],
			[]
		],
		pr = Math.sqrt,
		gr = Math.atan2,
		mr = function(t, e) {
			var i, n, a, o, r, s = t.data,
				l = dr.M,
				u = dr.C,
				h = dr.L,
				c = dr.R,
				d = dr.A,
				f = dr.Q;
			for (o = a = 0; a < s.length;) {
				switch (i = s[a++], o = a, n = 0, i) {
					case l:
					case h:
						n = 1;
						break;
					case u:
						n = 3;
						break;
					case f:
						n = 2;
						break;
					case d:
						var p = e[4],
							g = e[5],
							m = pr(e[0] * e[0] + e[1] * e[1]),
							v = pr(e[2] * e[2] + e[3] * e[3]),
							y = gr(-e[1] / v, e[0] / m);
						s[a] *= m, s[a++] += p, s[a] *= v, s[a++] += g, s[a++] *= m, s[a++] *= v, s[a++] += y, s[a++] += y, o = a += 2;
						break;
					case c:
						x[0] = s[a++], x[1] = s[a++], bt(x, x, e), s[o++] = x[0], s[o++] = x[1], x[0] += s[a++], x[1] += s[a++], bt(x, x,
							e), s[o++] = x[0], s[o++] = x[1]
				}
				for (r = 0; r < n; r++) {
					var x;
					(x = fr[r])[0] = s[a++], x[1] = s[a++], bt(x, x, e), s[o++] = x[0], s[o++] = x[1]
				}
			}
		},
		vr = Math.sqrt,
		yr = Math.sin,
		xr = Math.cos,
		_r = Math.PI,
		wr = function(t, e) {
			return (t[0] * e[0] + t[1] * e[1]) / (cr(t) * cr(e))
		},
		br = function(t, e) {
			return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(wr(t, e))
		};

	function Sr(t, e, i, n, a, o, r, s, l, u, h) {
		var c = l * (_r / 180),
			d = xr(c) * (t - i) / 2 + yr(c) * (e - n) / 2,
			f = -1 * yr(c) * (t - i) / 2 + xr(c) * (e - n) / 2,
			p = d * d / (r * r) + f * f / (s * s);
		1 < p && (r *= vr(p), s *= vr(p));
		var g = (a === o ? -1 : 1) * vr((r * r * (s * s) - r * r * (f * f) - s * s * (d * d)) / (r * r * (f * f) + s * s * (
				d * d))) || 0,
			m = g * r * f / s,
			v = g * -s * d / r,
			y = (t + i) / 2 + xr(c) * m - yr(c) * v,
			x = (e + n) / 2 + yr(c) * m + xr(c) * v,
			_ = br([1, 0], [(d - m) / r, (f - v) / s]),
			w = [(d - m) / r, (f - v) / s],
			b = [(-1 * d - m) / r, (-1 * f - v) / s],
			S = br(w, b);
		wr(w, b) <= -1 && (S = _r), 1 <= wr(w, b) && (S = 0), 0 === o && 0 < S && (S -= 2 * _r), 1 === o && S < 0 && (S += 2 *
			_r), h.addData(u, y, x, r, s, _, S, c, o)
	}
	var Mr = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,
		Ir = /-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;

	function Ar(t, e) {
		var i = function(t) {
			if (!t) return new Ho;
			for (var e, i = 0, n = 0, a = i, o = n, r = new Ho, s = Ho.CMD, l = t.match(Mr), u = 0; u < l.length; u++) {
				for (var h, c = l[u], d = c.charAt(0), f = c.match(Ir) || [], p = f.length, g = 0; g < p; g++) f[g] = parseFloat(
					f[g]);
				for (var m = 0; m < p;) {
					var v, y, x, _, w, b, S, M = i,
						I = n;
					switch (d) {
						case "l":
							i += f[m++], n += f[m++], h = s.L, r.addData(h, i, n);
							break;
						case "L":
							i = f[m++], n = f[m++], h = s.L, r.addData(h, i, n);
							break;
						case "m":
							i += f[m++], n += f[m++], h = s.M, r.addData(h, i, n), a = i, o = n, d = "l";
							break;
						case "M":
							i = f[m++], n = f[m++], h = s.M, r.addData(h, i, n), a = i, o = n, d = "L";
							break;
						case "h":
							i += f[m++], h = s.L, r.addData(h, i, n);
							break;
						case "H":
							i = f[m++], h = s.L, r.addData(h, i, n);
							break;
						case "v":
							n += f[m++], h = s.L, r.addData(h, i, n);
							break;
						case "V":
							n = f[m++], h = s.L, r.addData(h, i, n);
							break;
						case "C":
							h = s.C, r.addData(h, f[m++], f[m++], f[m++], f[m++], f[m++], f[m++]), i = f[m - 2], n = f[m - 1];
							break;
						case "c":
							h = s.C, r.addData(h, f[m++] + i, f[m++] + n, f[m++] + i, f[m++] + n, f[m++] + i, f[m++] + n), i += f[m - 2],
								n += f[m - 1];
							break;
						case "S":
							v = i, y = n;
							var A = r.len(),
								T = r.data;
							e === s.C && (v += i - T[A - 4], y += n - T[A - 3]), h = s.C, M = f[m++], I = f[m++], i = f[m++], n = f[m++],
								r.addData(h, v, y, M, I, i, n);
							break;
						case "s":
							v = i, y = n;
							A = r.len(), T = r.data;
							e === s.C && (v += i - T[A - 4], y += n - T[A - 3]), h = s.C, M = i + f[m++], I = n + f[m++], i += f[m++], n +=
								f[m++], r.addData(h, v, y, M, I, i, n);
							break;
						case "Q":
							M = f[m++], I = f[m++], i = f[m++], n = f[m++], h = s.Q, r.addData(h, M, I, i, n);
							break;
						case "q":
							M = f[m++] + i, I = f[m++] + n, i += f[m++], n += f[m++], h = s.Q, r.addData(h, M, I, i, n);
							break;
						case "T":
							v = i, y = n;
							A = r.len(), T = r.data;
							e === s.Q && (v += i - T[A - 4], y += n - T[A - 3]), i = f[m++], n = f[m++], h = s.Q, r.addData(h, v, y, i, n);
							break;
						case "t":
							v = i, y = n;
							A = r.len(), T = r.data;
							e === s.Q && (v += i - T[A - 4], y += n - T[A - 3]), i += f[m++], n += f[m++], h = s.Q, r.addData(h, v, y, i,
								n);
							break;
						case "A":
							x = f[m++], _ = f[m++], w = f[m++], b = f[m++], S = f[m++], Sr(M = i, I = n, i = f[m++], n = f[m++], b, S, x,
								_, w, h = s.A, r);
							break;
						case "a":
							x = f[m++], _ = f[m++], w = f[m++], b = f[m++], S = f[m++], Sr(M = i, I = n, i += f[m++], n += f[m++], b, S, x,
								_, w, h = s.A, r)
					}
				}
				"z" !== d && "Z" !== d || (h = s.Z, r.addData(h), i = a, n = o), e = h
			}
			return r.toStatic(), r
		}(t);
		return (e = e || {}).buildPath = function(t) {
			if (t.setData) {
				t.setData(i.data), (e = t.getContext()) && t.rebuildPath(e)
			} else {
				var e = t;
				i.rebuildPath(e)
			}
		}, e.applyTransform = function(t) {
			mr(i, t), this.dirty(!0)
		}, e
	}

	function Tr(t, e) {
		return new hr(Ar(t, e))
	}
	var Dr = function(t) {
		Xn.call(this, t)
	};
	Dr.prototype = {
		constructor: Dr,
		type: "text",
		brush: function(t, e) {
			var i = this.style;
			this.__dirty && Cn(i), i.fill = i.stroke = i.shadowBlur = i.shadowColor = i.shadowOffsetX = i.shadowOffsetY =
				null;
			var n = i.text;
			null != n && (n += ""), Hn(n, i) ? (this.setTransform(t), kn(this, t, n, i, null, e), this.restoreTransform(t)) :
				t.__attrCachedBy = Ri.NONE
		},
		getBoundingRect: function() {
			var t = this.style;
			if (this.__dirty && Cn(t), !this._rect) {
				var e = t.text;
				null != e ? e += "" : e = "";
				var i = un(t.text + "", t.font, t.textAlign, t.textVerticalAlign, t.textPadding, t.textLineHeight, t.rich);
				if (i.x += t.x || 0, i.y += t.y || 0, Vn(t.textStroke, t.textStrokeWidth)) {
					var n = t.textStrokeWidth;
					i.x -= n / 2, i.y -= n / 2, i.width += n, i.height += n
				}
				this._rect = i
			}
			return this._rect
		}
	}, w(Dr, Xn);

	function Cr(l) {
		return v.browser.ie && 11 <= v.browser.version ? function() {
			var t, e = this.__clipPaths,
				i = this.style;
			if (e)
				for (var n = 0; n < e.length; n++) {
					var a = e[n],
						o = a && a.shape,
						r = a && a.type;
					if (o && ("sector" === r && o.startAngle === o.endAngle || "rect" === r && (!o.width || !o.height))) {
						for (var s = 0; s < kr.length; s++) kr[s][2] = i[kr[s][0]], i[kr[s][0]] = kr[s][1];
						t = !0;
						break
					}
				}
			if (l.apply(this, arguments), t)
				for (s = 0; s < kr.length; s++) i[kr[s][0]] = kr[s][2]
		} : l
	}
	var Lr = hr.extend({
			type: "circle",
			shape: {
				cx: 0,
				cy: 0,
				r: 0
			},
			buildPath: function(t, e, i) {
				i && t.moveTo(e.cx + e.r, e.cy), t.arc(e.cx, e.cy, e.r, 0, 2 * Math.PI, !0)
			}
		}),
		kr = [
			["shadowBlur", 0],
			["shadowColor", "#000"],
			["shadowOffsetX", 0],
			["shadowOffsetY", 0]
		],
		Pr = hr.extend({
			type: "sector",
			shape: {
				cx: 0,
				cy: 0,
				r0: 0,
				r: 0,
				startAngle: 0,
				endAngle: 2 * Math.PI,
				clockwise: !0
			},
			brush: Cr(hr.prototype.brush),
			buildPath: function(t, e) {
				var i = e.cx,
					n = e.cy,
					a = Math.max(e.r0 || 0, 0),
					o = Math.max(e.r, 0),
					r = e.startAngle,
					s = e.endAngle,
					l = e.clockwise,
					u = Math.cos(r),
					h = Math.sin(r);
				t.moveTo(u * a + i, h * a + n), t.lineTo(u * o + i, h * o + n), t.arc(i, n, o, r, s, !l), t.lineTo(Math.cos(s) *
					a + i, Math.sin(s) * a + n), 0 !== a && t.arc(i, n, a, s, r, l), t.closePath()
			}
		}),
		Nr = hr.extend({
			type: "ring",
			shape: {
				cx: 0,
				cy: 0,
				r: 0,
				r0: 0
			},
			buildPath: function(t, e) {
				var i = e.cx,
					n = e.cy,
					a = 2 * Math.PI;
				t.moveTo(i + e.r, n), t.arc(i, n, e.r, 0, a, !1), t.moveTo(i + e.r0, n), t.arc(i, n, e.r0, 0, a, !0)
			}
		});

	function Or(t, e, i, n, a, o, r) {
		var s = .5 * (i - t),
			l = .5 * (n - e);
		return (2 * (e - i) + s + l) * r + (-3 * (e - i) - 2 * s - l) * o + s * a + e
	}

	function Er(t, e, i) {
		var n = e.points,
			a = e.smooth;
		if (n && 2 <= n.length) {
			if (a && "spline" !== a) {
				var o = function(t, e, i, n) {
					var a, o, r, s, l = [],
						u = [],
						h = [],
						c = [];
					if (n) {
						r = [1 / 0, 1 / 0], s = [-1 / 0, -1 / 0];
						for (var d = 0, f = t.length; d < f; d++) St(r, r, t[d]), Mt(s, s, t[d]);
						St(r, r, n[0]), Mt(s, s, n[1])
					}
					for (d = 0, f = t.length; d < f; d++) {
						var p = t[d];
						if (i) a = t[d ? d - 1 : f - 1], o = t[(d + 1) % f];
						else {
							if (0 === d || d === f - 1) {
								l.push(rt(t[d]));
								continue
							}
							a = t[d - 1], o = t[d + 1]
						}
						ht(u, o, a), gt(u, u, e);
						var g = vt(p, a),
							m = vt(p, o),
							v = g + m;
						0 !== v && (g /= v, m /= v), gt(h, u, -g), gt(c, u, m);
						var y = lt([], p, h),
							x = lt([], p, c);
						n && (Mt(y, y, r), St(y, y, s), Mt(x, x, r), St(x, x, s)), l.push(y), l.push(x)
					}
					return i && l.push(l.shift()), l
				}(n, a, i, e.smoothConstraint);
				t.moveTo(n[0][0], n[0][1]);
				for (var r = n.length, s = 0; s < (i ? r : r - 1); s++) {
					var l = o[2 * s],
						u = o[2 * s + 1],
						h = n[(s + 1) % r];
					t.bezierCurveTo(l[0], l[1], u[0], u[1], h[0], h[1])
				}
			} else {
				"spline" === a && (n = function(t, e) {
					for (var i = t.length, n = [], a = 0, o = 1; o < i; o++) a += vt(t[o - 1], t[o]);
					var r = a / 2;
					r = r < i ? i : r;
					for (o = 0; o < r; o++) {
						var s, l, u, h = o / (r - 1) * (e ? i : i - 1),
							c = Math.floor(h),
							d = h - c,
							f = t[c % i];
						u = e ? (s = t[(c - 1 + i) % i], l = t[(c + 1) % i], t[(c + 2) % i]) : (s = t[0 === c ? c : c - 1], l = t[i -
							2 < c ? i - 1 : c + 1], t[i - 3 < c ? i - 1 : c + 2]);
						var p = d * d,
							g = d * p;
						n.push([Or(s[0], f[0], l[0], u[0], d, p, g), Or(s[1], f[1], l[1], u[1], d, p, g)])
					}
					return n
				}(n, i)), t.moveTo(n[0][0], n[0][1]);
				s = 1;
				for (var c = n.length; s < c; s++) t.lineTo(n[s][0], n[s][1])
			}
			i && t.closePath()
		}
	}
	var Rr = hr.extend({
			type: "polygon",
			shape: {
				points: null,
				smooth: !1,
				smoothConstraint: null
			},
			buildPath: function(t, e) {
				Er(t, e, !0)
			}
		}),
		zr = hr.extend({
			type: "polyline",
			shape: {
				points: null,
				smooth: !1,
				smoothConstraint: null
			},
			style: {
				stroke: "#000",
				fill: null
			},
			buildPath: function(t, e) {
				Er(t, e, !1)
			}
		}),
		Br = Math.round;

	function Vr(t, e, i) {
		var n = i && i.lineWidth;
		if (e && n) {
			var a = e.x1,
				o = e.x2,
				r = e.y1,
				s = e.y2;
			Br(2 * a) === Br(2 * o) ? t.x1 = t.x2 = Fr(a, n, !0) : (t.x1 = a, t.x2 = o), Br(2 * r) === Br(2 * s) ? t.y1 = t.y2 =
				Fr(r, n, !0) : (t.y1 = r, t.y2 = s)
		}
	}

	function Gr(t, e, i) {
		var n = i && i.lineWidth;
		if (e && n) {
			var a = e.x,
				o = e.y,
				r = e.width,
				s = e.height;
			t.x = Fr(a, n, !0), t.y = Fr(o, n, !0), t.width = Math.max(Fr(a + r, n, !1) - t.x, 0 === r ? 0 : 1), t.height =
				Math.max(Fr(o + s, n, !1) - t.y, 0 === s ? 0 : 1)
		}
	}

	function Fr(t, e, i) {
		var n = Br(2 * t);
		return (n + Br(e)) % 2 == 0 ? n / 2 : (n + (i ? 1 : -1)) / 2
	}
	var Wr = {},
		Hr = hr.extend({
			type: "rect",
			shape: {
				r: 0,
				x: 0,
				y: 0,
				width: 0,
				height: 0
			},
			buildPath: function(t, e) {
				var i, n, a, o;
				this.subPixelOptimize ? (Gr(Wr, e, this.style), i = Wr.x, n = Wr.y, a = Wr.width, o = Wr.height, Wr.r = e.r, e =
					Wr) : (i = e.x, n = e.y, a = e.width, o = e.height), e.r ? bn(t, e) : t.rect(i, n, a, o), t.closePath()
			}
		}),
		Zr = {},
		Ur = hr.extend({
			type: "line",
			shape: {
				x1: 0,
				y1: 0,
				x2: 0,
				y2: 0,
				percent: 1
			},
			style: {
				stroke: "#000",
				fill: null
			},
			buildPath: function(t, e) {
				var i, n, a, o;
				o = this.subPixelOptimize ? (Vr(Zr, e, this.style), i = Zr.x1, n = Zr.y1, a = Zr.x2, Zr.y2) : (i = e.x1, n = e.y1,
					a = e.x2, e.y2);
				var r = e.percent;
				0 !== r && (t.moveTo(i, n), r < 1 && (a = i * (1 - r) + a * r, o = n * (1 - r) + o * r), t.lineTo(a, o))
			},
			pointAt: function(t) {
				var e = this.shape;
				return [e.x1 * (1 - t) + e.x2 * t, e.y1 * (1 - t) + e.y2 * t]
			}
		}),
		Xr = [];

	function Yr(t, e, i) {
		var n = t.cpx2,
			a = t.cpy2;
		return null === n || null === a ? [(i ? uo : lo)(t.x1, t.cpx1, t.cpx2, t.x2, e), (i ? uo : lo)(t.y1, t.cpy1, t.cpy2,
			t.y2, e)] : [(i ? po : fo)(t.x1, t.cpx1, t.x2, e), (i ? po : fo)(t.y1, t.cpy1, t.y2, e)]
	}

	function jr(t) {
		this.colorStops = t || []
	}
	var qr = hr.extend({
			type: "bezier-curve",
			shape: {
				x1: 0,
				y1: 0,
				x2: 0,
				y2: 0,
				cpx1: 0,
				cpy1: 0,
				percent: 1
			},
			style: {
				stroke: "#000",
				fill: null
			},
			buildPath: function(t, e) {
				var i = e.x1,
					n = e.y1,
					a = e.x2,
					o = e.y2,
					r = e.cpx1,
					s = e.cpy1,
					l = e.cpx2,
					u = e.cpy2,
					h = e.percent;
				0 !== h && (t.moveTo(i, n), null == l || null == u ? (h < 1 && (mo(i, r, a, h, Xr), r = Xr[1], a = Xr[2], mo(n,
					s, o, h, Xr), s = Xr[1], o = Xr[2]), t.quadraticCurveTo(r, s, a, o)) : (h < 1 && (co(i, r, l, a, h, Xr), r =
					Xr[1], l = Xr[2], a = Xr[3], co(n, s, u, o, h, Xr), s = Xr[1], u = Xr[2], o = Xr[3]), t.bezierCurveTo(r, s,
					l, u, a, o)))
			},
			pointAt: function(t) {
				return Yr(this.shape, t, !1)
			},
			tangentAt: function(t) {
				var e = Yr(this.shape, t, !0);
				return mt(e, e)
			}
		}),
		Kr = hr.extend({
			type: "arc",
			shape: {
				cx: 0,
				cy: 0,
				r: 0,
				startAngle: 0,
				endAngle: 2 * Math.PI,
				clockwise: !0
			},
			style: {
				stroke: "#000",
				fill: null
			},
			buildPath: function(t, e) {
				var i = e.cx,
					n = e.cy,
					a = Math.max(e.r, 0),
					o = e.startAngle,
					r = e.endAngle,
					s = e.clockwise,
					l = Math.cos(o),
					u = Math.sin(o);
				t.moveTo(l * a + i, u * a + n), t.arc(i, n, a, o, r, !s)
			}
		}),
		$r = hr.extend({
			type: "compound",
			shape: {
				paths: null
			},
			_updatePathDirty: function() {
				for (var t = this.__dirtyPath, e = this.shape.paths, i = 0; i < e.length; i++) t = t || e[i].__dirtyPath;
				this.__dirtyPath = t, this.__dirty = this.__dirty || t
			},
			beforeBrush: function() {
				this._updatePathDirty();
				for (var t = this.shape.paths || [], e = this.getGlobalScale(), i = 0; i < t.length; i++) t[i].path || t[i].createPathProxy(),
					t[i].path.setScale(e[0], e[1], t[i].segmentIgnoreThreshold)
			},
			buildPath: function(t, e) {
				for (var i = e.paths || [], n = 0; n < i.length; n++) i[n].buildPath(t, i[n].shape, !0)
			},
			afterBrush: function() {
				for (var t = this.shape.paths || [], e = 0; e < t.length; e++) t[e].__dirtyPath = !1
			},
			getBoundingRect: function() {
				return this._updatePathDirty(), hr.prototype.getBoundingRect.call(this)
			}
		});
	jr.prototype = {
		constructor: jr,
		addColorStop: function(t, e) {
			this.colorStops.push({
				offset: t,
				color: e
			})
		}
	};

	function Jr(t, e, i, n, a, o) {
		this.x = null == t ? 0 : t, this.y = null == e ? 0 : e, this.x2 = null == i ? 1 : i, this.y2 = null == n ? 0 : n,
			this.type = "linear", this.global = o || !1, jr.call(this, a)
	}
	Jr.prototype = {
		constructor: Jr
	}, w(Jr, jr);

	function Qr(t, e, i, n, a) {
		this.x = null == t ? .5 : t, this.y = null == e ? .5 : e, this.r = null == i ? .5 : i, this.type = "radial", this.global =
			a || !1, jr.call(this, n)
	}

	function ts(t) {
		Xn.call(this, t), this._displayables = [], this._temporaryDisplayables = [], this._cursor = 0, this.notClear = !0
	}
	Qr.prototype = {
		constructor: Qr
	}, w(Qr, jr), ts.prototype.incremental = !0, ts.prototype.clearDisplaybles = function() {
		this._displayables = [], this._temporaryDisplayables = [], this._cursor = 0, this.dirty(), this.notClear = !1
	}, ts.prototype.addDisplayable = function(t, e) {
		e ? this._temporaryDisplayables.push(t) : this._displayables.push(t), this.dirty()
	}, ts.prototype.addDisplayables = function(t, e) {
		e = e || !1;
		for (var i = 0; i < t.length; i++) this.addDisplayable(t[i], e)
	}, ts.prototype.eachPendingDisplayable = function(t) {
		for (var e = this._cursor; e < this._displayables.length; e++) t && t(this._displayables[e]);
		for (e = 0; e < this._temporaryDisplayables.length; e++) t && t(this._temporaryDisplayables[e])
	}, ts.prototype.update = function() {
		this.updateTransform();
		for (var t = this._cursor; t < this._displayables.length; t++) {
			(e = this._displayables[t]).parent = this, e.update(), e.parent = null
		}
		for (t = 0; t < this._temporaryDisplayables.length; t++) {
			var e;
			(e = this._temporaryDisplayables[t]).parent = this, e.update(), e.parent = null
		}
	}, ts.prototype.brush = function(t, e) {
		for (var i = this._cursor; i < this._displayables.length; i++) {
			(n = this._displayables[i]).beforeBrush && n.beforeBrush(t), n.brush(t, i === this._cursor ? null : this._displayables[
				i - 1]), n.afterBrush && n.afterBrush(t)
		}
		this._cursor = i;
		for (i = 0; i < this._temporaryDisplayables.length; i++) {
			var n;
			(n = this._temporaryDisplayables[i]).beforeBrush && n.beforeBrush(t), n.brush(t, 0 === i ? null : this._temporaryDisplayables[
				i - 1]), n.afterBrush && n.afterBrush(t)
		}
		this._temporaryDisplayables = [], this.notClear = !0
	};
	var es = [];
	ts.prototype.getBoundingRect = function() {
		if (!this._rect) {
			for (var t = new bi(1 / 0, 1 / 0, -1 / 0, -1 / 0), e = 0; e < this._displayables.length; e++) {
				var i = this._displayables[e],
					n = i.getBoundingRect().clone();
				i.needLocalTransform() && n.applyTransform(i.getLocalTransform(es)), t.union(n)
			}
			this._rect = t
		}
		return this._rect
	}, ts.prototype.contain = function(t, e) {
		var i = this.transformCoordToLocal(t, e);
		if (this.getBoundingRect().contain(i[0], i[1]))
			for (var n = 0; n < this._displayables.length; n++) {
				if (this._displayables[n].contain(t, e)) return !0
			}
		return !1
	}, w(ts, Xn);
	var is = Math.max,
		ns = Math.min,
		as = {},
		os = 1,
		rs = {
			color: "textFill",
			textBorderColor: "textStroke",
			textBorderWidth: "textStrokeWidth"
		},
		ss = "emphasis",
		ls = "normal",
		us = 1,
		hs = {},
		cs = {};

	function ds(t) {
		return hr.extend(t)
	}

	function fs(t, e) {
		cs[t] = e
	}

	function ps(t) {
		if (cs.hasOwnProperty(t)) return cs[t]
	}

	function gs(t, e, i, n) {
		var a = Tr(t, e);
		return i && ("center" === n && (i = vs(i, a.getBoundingRect())), xs(a, i)), a
	}

	function ms(t, i, n) {
		var a = new Yn({
			style: {
				image: t,
				x: i.x,
				y: i.y,
				width: i.width,
				height: i.height
			},
			onload: function(t) {
				if ("center" === n) {
					var e = {
						width: t.width,
						height: t.height
					};
					a.setStyle(vs(i, e))
				}
			}
		});
		return a
	}

	function vs(t, e) {
		var i, n = e.width / e.height,
			a = t.height * n;
		return i = a <= t.width ? t.height : (a = t.width) / n, {
			x: t.x + t.width / 2 - a / 2,
			y: t.y + t.height / 2 - i / 2,
			width: a,
			height: i
		}
	}
	var ys = function(t, e) {
		for (var i = [], n = t.length, a = 0; a < n; a++) {
			var o = t[a];
			o.path || o.createPathProxy(), o.__dirtyPath && o.buildPath(o.path, o.shape, !0), i.push(o.path)
		}
		var r = new hr(e);
		return r.createPathProxy(), r.buildPath = function(t) {
			t.appendPath(i);
			var e = t.getContext();
			e && t.rebuildPath(e)
		}, r
	};

	function xs(t, e) {
		if (t.applyTransform) {
			var i = t.getBoundingRect().calculateTransform(e);
			t.applyTransform(i)
		}
	}
	var _s = Fr;

	function ws(t) {
		return null != t && "none" !== t
	}
	var bs = Q(),
		Ss = 0;

	function Ms(t) {
		var e = t.__hoverStl;
		if (e && !t.__highlighted) {
			var i = t.__zr,
				n = t.useHoverLayer && i && "canvas" === i.painter.type;
			if (t.__highlighted = n ? "layer" : "plain", !(t.isGroup || !i && t.useHoverLayer)) {
				var a = t,
					o = t.style;
				n && (o = (a = i.addHover(t)).style), Us(o), n || function(t) {
					if (t.__hoverStlDirty) {
						t.__hoverStlDirty = !1;
						var e = t.__hoverStl;
						if (e) {
							var i = t.__cachedNormalStl = {};
							t.__cachedNormalZ2 = t.z2;
							var n = t.style;
							for (var a in e) null != e[a] && (i[a] = n[a]);
							i.fill = n.fill, i.stroke = n.stroke
						} else t.__cachedNormalStl = t.__cachedNormalZ2 = null
					}
				}(a), o.extendFrom(e), Is(o, e, "fill"), Is(o, e, "stroke"), Zs(o), n || (t.dirty(!1), t.z2 += os)
			}
		}
	}

	function Is(t, e, i) {
		!ws(e[i]) && ws(t[i]) && (t[i] = function(t) {
			if ("string" != typeof t) return t;
			var e = bs.get(t);
			return e || (e = ze(t, -.1), Ss < 1e4 && (bs.set(t, e), Ss++)), e
		}(t[i]))
	}

	function As(t) {
		var e = t.__highlighted;
		if (e && (t.__highlighted = !1, !t.isGroup))
			if ("layer" === e) t.__zr && t.__zr.removeHover(t);
			else {
				var i = t.style,
					n = t.__cachedNormalStl;
				n && (Us(i), t.setStyle(n), Zs(i));
				var a = t.__cachedNormalZ2;
				null != a && t.z2 - a === os && (t.z2 = a)
			}
	}

	function Ts(t, e, i) {
		var n, a = ls,
			o = ls;
		t.__highlighted && (a = ss, n = !0), e(t, i), t.__highlighted && (o = ss, n = !0), t.isGroup && t.traverse(function(
			t) {
			t.isGroup || e(t, i)
		}), n && t.__highDownOnUpdate && t.__highDownOnUpdate(a, o)
	}

	function Ds(t, e) {
		e = t.__hoverStl = !1 !== e && (t.hoverStyle || e || {}), t.__hoverStlDirty = !0, t.__highlighted && (t.__cachedNormalStl =
			null, As(t), Ms(t))
	}

	function Cs(t) {
		Ns(this, t) || this.__highByOuter || Ts(this, Ms)
	}

	function Ls(t) {
		Ns(this, t) || this.__highByOuter || Ts(this, As)
	}

	function ks(t) {
		this.__highByOuter |= 1 << (t || 0), Ts(this, Ms)
	}

	function Ps(t) {
		(this.__highByOuter &= ~(1 << (t || 0))) || Ts(this, As)
	}

	function Ns(t, e) {
		return t.__highDownSilentOnTouch && e.zrByTouch
	}

	function Os(t, e) {
		Es(t, !0), Ts(t, Ds, e)
	}

	function Es(t, e) {
		var i = !1 === e;
		if (t.__highDownSilentOnTouch = t.highDownSilentOnTouch, t.__highDownOnUpdate = t.highDownOnUpdate, !i || t.__highDownDispatcher) {
			var n = i ? "off" : "on";
			t[n]("mouseover", Cs)[n]("mouseout", Ls), t[n]("emphasis", ks)[n]("normal", Ps), t.__highByOuter = t.__highByOuter ||
				0, t.__highDownDispatcher = !i
		}
	}

	function Rs(t) {
		return !(!t || !t.__highDownDispatcher)
	}

	function zs(t) {
		var e = hs[t];
		return null == e && us <= 32 && (e = hs[t] = us++), e
	}

	function Bs(t, e, i, n, a, o, r) {
		var s, l = (a = a || as).labelFetcher,
			u = a.labelDataIndex,
			h = a.labelDimIndex,
			c = i.getShallow("show"),
			d = n.getShallow("show");
		(c || d) && (l && (s = l.getFormattedLabel(u, "normal", null, h)), null == s && (s = O(a.defaultText) ? a.defaultText(
			u, a) : a.defaultText));
		var f = c ? s : null,
			p = d ? H(l ? l.getFormattedLabel(u, "emphasis", null, h) : null, s) : null;
		null == f && null == p || (Gs(t, i, o, a), Gs(e, n, r, a, !0)), t.text = f, e.text = p
	}

	function Vs(t, e, i) {
		var n = t.style;
		e && (Us(n), t.setStyle(e), Zs(n)), n = t.__hoverStl, i && n && (Us(n), L(n, i), Zs(n))
	}

	function Gs(t, e, i, n, a) {
		return Fs(t, e, n, a), i && L(t, i), t
	}

	function Fs(t, e, i, n) {
		if ((i = i || as).isRectText) {
			var a;
			i.getTextPosition ? a = i.getTextPosition(e, n) : "outside" === (a = e.getShallow("position") || (n ? null :
				"inside")) && (a = "top"), t.textPosition = a, t.textOffset = e.getShallow("offset");
			var o = e.getShallow("rotate");
			null != o && (o *= Math.PI / 180), t.textRotation = o, t.textDistance = H(e.getShallow("distance"), n ? null : 5)
		}
		var r, s = e.ecModel,
			l = s && s.option.textStyle,
			u = function(t) {
				var e;
				for (; t && t !== t.ecModel;) {
					var i = (t.option || as).rich;
					if (i)
						for (var n in e = e || {}, i) i.hasOwnProperty(n) && (e[n] = 1);
					t = t.parentModel
				}
				return e
			}(e);
		if (u)
			for (var h in r = {}, u)
				if (u.hasOwnProperty(h)) {
					var c = e.getModel(["rich", h]);
					Ws(r[h] = {}, c, l, i, n)
				}
		return t.rich = r, Ws(t, e, l, i, n, !0), i.forceRich && !i.textStyle && (i.textStyle = {}), t
	}

	function Ws(t, e, i, n, a, o) {
		i = !a && i || as, t.textFill = Hs(e.getShallow("color"), n) || i.color, t.textStroke = Hs(e.getShallow(
				"textBorderColor"), n) || i.textBorderColor, t.textStrokeWidth = H(e.getShallow("textBorderWidth"), i.textBorderWidth),
			a || (o && (t.insideRollbackOpt = n, Zs(t)), null == t.textFill && (t.textFill = n.autoColor)), t.fontStyle = e.getShallow(
				"fontStyle") || i.fontStyle, t.fontWeight = e.getShallow("fontWeight") || i.fontWeight, t.fontSize = e.getShallow(
				"fontSize") || i.fontSize, t.fontFamily = e.getShallow("fontFamily") || i.fontFamily, t.textAlign = e.getShallow(
				"align"), t.textVerticalAlign = e.getShallow("verticalAlign") || e.getShallow("baseline"), t.textLineHeight = e.getShallow(
				"lineHeight"), t.textWidth = e.getShallow("width"), t.textHeight = e.getShallow("height"), t.textTag = e.getShallow(
				"tag"), o && n.disableBox || (t.textBackgroundColor = Hs(e.getShallow("backgroundColor"), n), t.textPadding = e.getShallow(
				"padding"), t.textBorderColor = Hs(e.getShallow("borderColor"), n), t.textBorderWidth = e.getShallow(
				"borderWidth"), t.textBorderRadius = e.getShallow("borderRadius"), t.textBoxShadowColor = e.getShallow(
				"shadowColor"), t.textBoxShadowBlur = e.getShallow("shadowBlur"), t.textBoxShadowOffsetX = e.getShallow(
				"shadowOffsetX"), t.textBoxShadowOffsetY = e.getShallow("shadowOffsetY")), t.textShadowColor = e.getShallow(
				"textShadowColor") || i.textShadowColor, t.textShadowBlur = e.getShallow("textShadowBlur") || i.textShadowBlur, t.textShadowOffsetX =
			e.getShallow("textShadowOffsetX") || i.textShadowOffsetX, t.textShadowOffsetY = e.getShallow("textShadowOffsetY") ||
			i.textShadowOffsetY
	}

	function Hs(t, e) {
		return "auto" !== t ? t : e && e.autoColor ? e.autoColor : null
	}

	function Zs(t) {
		var e, i = t.textPosition,
			n = t.insideRollbackOpt;
		if (n && null == t.textFill) {
			var a = n.autoColor,
				o = n.isRectText,
				r = n.useInsideStyle,
				s = !1 !== r && (!0 === r || o && i && "string" == typeof i && 0 <= i.indexOf("inside")),
				l = !s && null != a;
			(s || l) && (e = {
				textFill: t.textFill,
				textStroke: t.textStroke,
				textStrokeWidth: t.textStrokeWidth
			}), s && (t.textFill = "#fff", null == t.textStroke && (t.textStroke = a, null == t.textStrokeWidth && (t.textStrokeWidth =
				2))), l && (t.textFill = a)
		}
		t.insideRollback = e
	}

	function Us(t) {
		var e = t.insideRollback;
		e && (t.textFill = e.textFill, t.textStroke = e.textStroke, t.textStrokeWidth = e.textStrokeWidth, t.insideRollback =
			null)
	}

	function Xs(t, e) {
		var i = e || e.getModel("textStyle");
		return j([t.fontStyle || i && i.getShallow("fontStyle") || "", t.fontWeight || i && i.getShallow("fontWeight") || "",
			(t.fontSize || i && i.getShallow("fontSize") || 12) + "px", t.fontFamily || i && i.getShallow("fontFamily") ||
			"sans-serif"
		].join(" "))
	}

	function Ys(t, e, i, n, a, o) {
		if ("function" == typeof a && (o = a, a = null), n && n.isAnimationEnabled()) {
			var r = t ? "Update" : "",
				s = n.getShallow("animationDuration" + r),
				l = n.getShallow("animationEasing" + r),
				u = n.getShallow("animationDelay" + r);
			"function" == typeof u && (u = u(a, n.getAnimationDelayParams ? n.getAnimationDelayParams(e, a) : null)),
				"function" == typeof s && (s = s(a)), 0 < s ? e.animateTo(i, s, u || 0, l, o, !!o) : (e.stopAnimation(), e.attr(i),
					o && o())
		} else e.stopAnimation(), e.attr(i), o && o()
	}

	function js(t, e, i, n, a) {
		Ys(!0, t, e, i, n, a)
	}

	function qs(t, e, i, n, a) {
		Ys(!1, t, e, i, n, a)
	}

	function Ks(t, e) {
		for (var i = te([]); t && t !== e;) ie(i, t.getLocalTransform(), i), t = t.parent;
		return i
	}

	function $s(t, e, i) {
		return e && !P(e) && (e = ce.getLocalTransform(e)), i && (e = re([], e)), bt([], t, e)
	}

	function Js(t, e, i) {
		var n = 0 === e[4] || 0 === e[5] || 0 === e[0] ? 1 : Math.abs(2 * e[4] / e[0]),
			a = 0 === e[4] || 0 === e[5] || 0 === e[2] ? 1 : Math.abs(2 * e[4] / e[2]),
			o = ["left" === t ? -n : "right" === t ? n : 0, "top" === t ? -a : "bottom" === t ? a : 0];
		return o = $s(o, e, i), Math.abs(o[0]) > Math.abs(o[1]) ? 0 < o[0] ? "right" : "left" : 0 < o[1] ? "bottom" : "top"
	}

	function Qs(t, e, n, i) {
		if (t && e) {
			var a, o = (a = {}, t.traverse(function(t) {
				!t.isGroup && t.anid && (a[t.anid] = t)
			}), a);
			e.traverse(function(t) {
				if (!t.isGroup && t.anid) {
					var e = o[t.anid];
					if (e) {
						var i = r(t);
						t.attr(r(e)), js(t, i, n, t.dataIndex)
					}
				}
			})
		}

		function r(t) {
			var e = {
				position: rt(t.position),
				rotation: t.rotation
			};
			return t.shape && (e.shape = L({}, t.shape)), e
		}
	}

	function tl(t, n) {
		return N(t, function(t) {
			var e = t[0];
			e = is(e, n.x), e = ns(e, n.x + n.width);
			var i = t[1];
			return i = is(i, n.y), [e, i = ns(i, n.y + n.height)]
		})
	}

	function el(t, e, i) {
		var n = (e = L({
			rectHover: !0
		}, e)).style = {
			strokeNoScale: !0
		};
		if (i = i || {
				x: -1,
				y: -1,
				width: 2,
				height: 2
			}, t) return 0 === t.indexOf("image://") ? (n.image = t.slice(8), C(n, i), new Yn(e)) : gs(t.replace("path://", ""),
			e, i, "center")
	}

	function il(t, e, i, n, a) {
		for (var o = 0, r = a[a.length - 1]; o < a.length; o++) {
			var s = a[o];
			if (nl(t, e, i, n, s[0], s[1], r[0], r[1])) return !0;
			r = s
		}
	}

	function nl(t, e, i, n, a, o, r, s) {
		var l = i - t,
			u = n - e,
			h = r - a,
			c = s - o,
			d = al(h, c, l, u);
		if (function(t) {
				return t <= 1e-6 && -1e-6 <= t
			}(d)) return !1;
		var f = t - a,
			p = e - o,
			g = al(f, p, l, u) / d;
		if (g < 0 || 1 < g) return !1;
		var m = al(f, p, h, c) / d;
		return !(m < 0 || 1 < m)
	}

	function al(t, e, i, n) {
		return t * n - i * e
	}
	fs("circle", Lr), fs("sector", Pr), fs("ring", Nr), fs("polygon", Rr), fs("polyline", zr), fs("rect", Hr), fs("line",
		Ur), fs("bezierCurve", qr), fs("arc", Kr);
	var ol = (Object.freeze || Object)({
			Z2_EMPHASIS_LIFT: os,
			CACHED_LABEL_STYLE_PROPERTIES: rs,
			extendShape: ds,
			extendPath: function(t, e) {
				return function(t, e) {
					return hr.extend(Ar(t, e))
				}(t, e)
			},
			registerShape: fs,
			getShapeClass: ps,
			makePath: gs,
			makeImage: ms,
			mergePath: ys,
			resizePath: xs,
			subPixelOptimizeLine: function(t) {
				return Vr(t.shape, t.shape, t.style), t
			},
			subPixelOptimizeRect: function(t) {
				return Gr(t.shape, t.shape, t.style), t
			},
			subPixelOptimize: _s,
			setElementHoverStyle: Ds,
			setHoverStyle: Os,
			setAsHighDownDispatcher: Es,
			isHighDownDispatcher: Rs,
			getHighlightDigit: zs,
			setLabelStyle: Bs,
			modifyLabelStyle: Vs,
			setTextStyle: Gs,
			setText: function(t, e, i) {
				var n, a = {
					isRectText: !0
				};
				!1 === i ? n = !0 : a.autoColor = i, Fs(t, e, a, n)
			},
			getFont: Xs,
			updateProps: js,
			initProps: qs,
			getTransform: Ks,
			applyTransform: $s,
			transformDirection: Js,
			groupTransition: Qs,
			clipPointsByRect: tl,
			clipRectByRect: function(t, e) {
				var i = is(t.x, e.x),
					n = ns(t.x + t.width, e.x + e.width),
					a = is(t.y, e.y),
					o = ns(t.y + t.height, e.y + e.height);
				if (i <= n && a <= o) return {
					x: i,
					y: a,
					width: n - i,
					height: o - a
				}
			},
			createIcon: el,
			linePolygonIntersect: il,
			lineLineIntersect: nl,
			Group: Si,
			Image: Yn,
			Text: Dr,
			Circle: Lr,
			Sector: Pr,
			Ring: Nr,
			Polygon: Rr,
			Polyline: zr,
			Rect: Hr,
			Line: Ur,
			BezierCurve: qr,
			Arc: Kr,
			IncrementalDisplayable: ts,
			CompoundPath: $r,
			LinearGradient: Jr,
			RadialGradient: Qr,
			BoundingRect: bi
		}),
		rl = ["textStyle", "color"],
		sl = {
			getTextColor: function(t) {
				var e = this.ecModel;
				return this.getShallow("color") || (!t && e ? e.get(rl) : null)
			},
			getFont: function() {
				return Xs({
					fontStyle: this.getShallow("fontStyle"),
					fontWeight: this.getShallow("fontWeight"),
					fontSize: this.getShallow("fontSize"),
					fontFamily: this.getShallow("fontFamily")
				}, this.ecModel)
			},
			getTextRect: function(t) {
				return un(t, this.getFont(), this.getShallow("align"), this.getShallow("verticalAlign") || this.getShallow(
					"baseline"), this.getShallow("padding"), this.getShallow("lineHeight"), this.getShallow("rich"), this.getShallow(
					"truncateText"))
			}
		},
		ll = Xa([
			["fill", "color"],
			["stroke", "borderColor"],
			["lineWidth", "borderWidth"],
			["opacity"],
			["shadowBlur"],
			["shadowOffsetX"],
			["shadowOffsetY"],
			["shadowColor"],
			["textPosition"],
			["textAlign"]
		]),
		ul = {
			getItemStyle: function(t, e) {
				var i = ll(this, t, e),
					n = this.getBorderLineDash();
				return n && (i.lineDash = n), i
			},
			getBorderLineDash: function() {
				var t = this.get("borderType");
				return "solid" === t || null == t ? null : "dashed" === t ? [5, 5] : [1, 1]
			}
		},
		hl = b,
		cl = La();

	function dl(t, e, i) {
		this.parentModel = e, this.ecModel = i, this.option = t
	}

	function fl(t, e, i) {
		for (var n = 0; n < e.length && (!e[n] || null != (t = t && "object" == typeof t ? t[e[n]] : null)); n++);
		return null == t && i && (t = i.get(e)), t
	}

	function pl(t, e) {
		var i = cl(t).getParent;
		return i ? i.call(t, e) : t.parentModel
	}
	dl.prototype = {
		constructor: dl,
		init: null,
		mergeOption: function(t) {
			m(this.option, t, !0)
		},
		get: function(t, e) {
			return null == t ? this.option : fl(this.option, this.parsePath(t), !e && pl(this, t))
		},
		getShallow: function(t, e) {
			var i = this.option,
				n = null == i ? i : i[t],
				a = !e && pl(this, t);
			return null == n && a && (n = a.getShallow(t)), n
		},
		getModel: function(t, e) {
			var i;
			return new dl(null == t ? this.option : fl(this.option, t = this.parsePath(t)), e = e || (i = pl(this, t)) && i.getModel(
				t), this.ecModel)
		},
		isEmpty: function() {
			return null == this.option
		},
		restoreData: function() {},
		clone: function() {
			return new this.constructor(D(this.option))
		},
		setReadOnly: function(t) {},
		parsePath: function(t) {
			return "string" == typeof t && (t = t.split(".")), t
		},
		customizeGetParent: function(t) {
			cl(this).getParent = t
		},
		isAnimationEnabled: function() {
			if (!v.node) {
				if (null != this.option.animation) return !!this.option.animation;
				if (this.parentModel) return this.parentModel.isAnimationEnabled()
			}
		}
	}, Ga(dl), Wa(dl), hl(dl, ja), hl(dl, Ka), hl(dl, sl), hl(dl, ul);
	var gl = 0;

	function ml(t) {
		return [t || "", gl++, Math.random().toFixed(5)].join("_")
	}
	var vl = 1e-4;

	function yl(t, e, i, n) {
		var a = e[1] - e[0],
			o = i[1] - i[0];
		if (0 == a) return 0 == o ? i[0] : (i[0] + i[1]) / 2;
		if (n)
			if (0 < a) {
				if (t <= e[0]) return i[0];
				if (t >= e[1]) return i[1]
			} else {
				if (t >= e[0]) return i[0];
				if (t <= e[1]) return i[1]
			}
		else {
			if (t === e[0]) return i[0];
			if (t === e[1]) return i[1]
		}
		return (t - e[0]) / a * o + i[0]
	}

	function xl(t, e) {
		switch (t) {
			case "center":
			case "middle":
				t = "50%";
				break;
			case "left":
			case "top":
				t = "0%";
				break;
			case "right":
			case "bottom":
				t = "100%"
		}
		return "string" == typeof t ? function(t) {
			return t.replace(/^\s+|\s+$/g, "")
		}(t).match(/%$/) ? parseFloat(t) / 100 * e : parseFloat(t) : null == t ? NaN : +t
	}

	function _l(t, e, i) {
		return null == e && (e = 10), e = Math.min(Math.max(0, e), 20), t = (+t).toFixed(e), i ? t : +t
	}

	function wl(t) {
		return t.sort(function(t, e) {
			return t - e
		}), t
	}

	function bl(t) {
		if (t = +t, isNaN(t)) return 0;
		for (var e = 1, i = 0; Math.round(t * e) / e !== t;) e *= 10, i++;
		return i
	}

	function Sl(t) {
		var e = t.toString(),
			i = e.indexOf("e");
		if (0 < i) {
			var n = +e.slice(i + 1);
			return n < 0 ? -n : 0
		}
		var a = e.indexOf(".");
		return a < 0 ? 0 : e.length - 1 - a
	}

	function Ml(t, e) {
		var i = Math.log,
			n = Math.LN10,
			a = Math.floor(i(t[1] - t[0]) / n),
			o = Math.round(i(Math.abs(e[1] - e[0])) / n),
			r = Math.min(Math.max(-a + o, 0), 20);
		return isFinite(r) ? r : 20
	}

	function Il(t, e, i) {
		if (!t[e]) return 0;
		var n = S(t, function(t, e) {
			return t + (isNaN(e) ? 0 : e)
		}, 0);
		if (0 === n) return 0;
		for (var a = Math.pow(10, i), o = N(t, function(t) {
				return (isNaN(t) ? 0 : t) / n * a * 100
			}), r = 100 * a, s = N(o, function(t) {
				return Math.floor(t)
			}), l = S(s, function(t, e) {
				return t + e
			}, 0), u = N(o, function(t, e) {
				return t - s[e]
			}); l < r;) {
			for (var h = Number.NEGATIVE_INFINITY, c = null, d = 0, f = u.length; d < f; ++d) u[d] > h && (h = u[d], c = d);
			++s[c], u[c] = 0, ++l
		}
		return s[e] / a
	}
	var Al = 9007199254740991;

	function Tl(t) {
		var e = 2 * Math.PI;
		return (t % e + e) % e
	}

	function Dl(t) {
		return -vl < t && t < vl
	}
	var Cl =
		/^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/;

	function Ll(t) {
		if (t instanceof Date) return t;
		if ("string" != typeof t) return null == t ? new Date(NaN) : new Date(Math.round(t));
		var e = Cl.exec(t);
		if (!e) return new Date(NaN);
		if (e[8]) {
			var i = +e[4] || 0;
			return "Z" !== e[8].toUpperCase() && (i -= e[8].slice(0, 3)), new Date(Date.UTC(+e[1], +(e[2] || 1) - 1, +e[3] || 1,
				i, +(e[5] || 0), +e[6] || 0, +e[7] || 0))
		}
		return new Date(+e[1], +(e[2] || 1) - 1, +e[3] || 1, +e[4] || 0, +(e[5] || 0), +e[6] || 0, +e[7] || 0)
	}

	function kl(t) {
		return Math.pow(10, Pl(t))
	}

	function Pl(t) {
		if (0 === t) return 0;
		var e = Math.floor(Math.log(t) / Math.LN10);
		return 10 <= t / Math.pow(10, e) && e++, e
	}

	function Nl(t, e) {
		var i = Pl(t),
			n = Math.pow(10, i),
			a = t / n;
		return t = (e ? a < 1.5 ? 1 : a < 2.5 ? 2 : a < 4 ? 3 : a < 7 ? 5 : 10 : a < 1 ? 1 : a < 2 ? 2 : a < 3 ? 3 : a < 5 ?
			5 : 10) * n, -20 <= i ? +t.toFixed(i < 0 ? -i : 0) : t
	}

	function Ol(t) {
		t.sort(function(t, e) {
			return function t(e, i, n) {
				return e.interval[n] < i.interval[n] || e.interval[n] === i.interval[n] && (e.close[n] - i.close[n] == (n ? -1 :
					1) || !n && t(e, i, 1))
			}(t, e, 0) ? -1 : 1
		});
		for (var e = -1 / 0, i = 1, n = 0; n < t.length;) {
			for (var a = t[n].interval, o = t[n].close, r = 0; r < 2; r++) a[r] <= e && (a[r] = e, o[r] = r ? 1 : 1 - i), e = a[
				r], i = o[r];
			a[0] === a[1] && o[0] * o[1] != 1 ? t.splice(n, 1) : n++
		}
		return t
	}

	function El(t) {
		return 0 <= t - parseFloat(t)
	}
	var Rl = (Object.freeze || Object)({
		linearMap: yl,
		parsePercent: xl,
		round: _l,
		asc: wl,
		getPrecision: bl,
		getPrecisionSafe: Sl,
		getPixelPrecision: Ml,
		getPercentWithPrecision: Il,
		MAX_SAFE_INTEGER: Al,
		remRadian: Tl,
		isRadianAroundZero: Dl,
		parseDate: Ll,
		quantity: kl,
		quantityExponent: Pl,
		nice: Nl,
		quantile: function(t, e) {
			var i = (t.length - 1) * e + 1,
				n = Math.floor(i),
				a = +t[n - 1],
				o = i - n;
			return o ? a + o * (t[n] - a) : a
		},
		reformIntervals: Ol,
		isNumeric: El
	});

	function zl(t) {
		return isNaN(t) ? "-" : (t = (t + "").split("."))[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, "$1,") + (1 < t.length ?
			"." + t[1] : "")
	}

	function Bl(t, e) {
		return t = (t || "").toLowerCase().replace(/-(.)/g, function(t, e) {
			return e.toUpperCase()
		}), e && t && (t = t.charAt(0).toUpperCase() + t.slice(1)), t
	}
	var Vl = X,
		Gl = /([&<>"'])/g,
		Fl = {
			"&": "&amp;",
			"<": "&lt;",
			">": "&gt;",
			'"': "&quot;",
			"'": "&#39;"
		};

	function Wl(t) {
		return null == t ? "" : (t + "").replace(Gl, function(t, e) {
			return Fl[e]
		})
	}

	function Hl(t, e) {
		return "{" + t + (null == e ? "" : e) + "}"
	}
	var Zl = ["a", "b", "c", "d", "e", "f", "g"];

	function Ul(t, e, i) {
		k(e) || (e = [e]);
		var n = e.length;
		if (!n) return "";
		for (var a = e[0].$vars || [], o = 0; o < a.length; o++) {
			var r = Zl[o];
			t = t.replace(Hl(r), Hl(r, 0))
		}
		for (var s = 0; s < n; s++)
			for (var l = 0; l < a.length; l++) {
				var u = e[s][a[l]];
				t = t.replace(Hl(Zl[l], s), i ? Wl(u) : u)
			}
		return t
	}

	function Xl(i, t, n) {
		return E(t, function(t, e) {
			i = i.replace("{" + e + "}", n ? Wl(t) : t)
		}), i
	}

	function Yl(t, e) {
		var i = (t = R(t) ? {
				color: t,
				extraCssText: e
			} : t || {}).color,
			n = t.type,
			a = (e = t.extraCssText, t.renderMode || "html"),
			o = t.markerId || "X";
		return i ? "html" === a ? "subItem" === n ?
			'<span style="display:inline-block;vertical-align:middle;margin-right:8px;margin-left:3px;border-radius:4px;width:4px;height:4px;background-color:' +
			Wl(i) + ";" + (e || "") + '"></span>' :
			'<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:' +
			Wl(i) + ";" + (e || "") + '"></span>' : {
				renderMode: a,
				content: "{marker" + o + "|}  ",
				style: {
					color: i
				}
			} : ""
	}

	function jl(t, e) {
		return "0000".substr(0, e - (t += "").length) + t
	}

	function ql(t, e, i) {
		"week" !== t && "month" !== t && "quarter" !== t && "half-year" !== t && "year" !== t || (t = "MM-dd\nyyyy");
		var n = Ll(e),
			a = i ? "UTC" : "",
			o = n["get" + a + "FullYear"](),
			r = n["get" + a + "Month"]() + 1,
			s = n["get" + a + "Date"](),
			l = n["get" + a + "Hours"](),
			u = n["get" + a + "Minutes"](),
			h = n["get" + a + "Seconds"](),
			c = n["get" + a + "Milliseconds"]();
		return t = t.replace("MM", jl(r, 2)).replace("M", r).replace("yyyy", o).replace("yy", o % 100).replace("dd", jl(s, 2))
			.replace("d", s).replace("hh", jl(l, 2)).replace("h", l).replace("mm", jl(u, 2)).replace("m", u).replace("ss", jl(h,
				2)).replace("s", h).replace("SSS", jl(c, 3))
	}

	function Kl(t) {
		return t ? t.charAt(0).toUpperCase() + t.substr(1) : t
	}
	var $l = fn;
	var Jl = (Object.freeze || Object)({
			addCommas: zl,
			toCamelCase: Bl,
			normalizeCssArray: Vl,
			encodeHTML: Wl,
			formatTpl: Ul,
			formatTplSimple: Xl,
			getTooltipMarker: Yl,
			formatTime: ql,
			capitalFirst: Kl,
			truncateText: $l,
			getTextBoundingRect: function(t) {
				return un(t.text, t.font, t.textAlign, t.textVerticalAlign, t.textPadding, t.textLineHeight, t.rich, t.truncate)
			},
			getTextRect: function(t, e, i, n, a, o, r, s) {
				return un(t, e, i, n, a, s, o, r)
			}
		}),
		Ql = E,
		tu = ["left", "right", "top", "bottom", "width", "height"],
		eu = [
			["width", "left", "right"],
			["height", "top", "bottom"]
		];

	function iu(h, c, d, f, p) {
		var g = 0,
			m = 0;
		null == f && (f = 1 / 0), null == p && (p = 1 / 0);
		var v = 0;
		c.eachChild(function(t, e) {
			var i, n, a = t.position,
				o = t.getBoundingRect(),
				r = c.childAt(e + 1),
				s = r && r.getBoundingRect();
			if ("horizontal" === h) {
				var l = o.width + (s ? -s.x + o.x : 0);
				v = f < (i = g + l) || t.newline ? (g = 0, i = l, m += v + d, o.height) : Math.max(v, o.height)
			} else {
				var u = o.height + (s ? -s.y + o.y : 0);
				v = p < (n = m + u) || t.newline ? (g += v + d, m = 0, n = u, o.width) : Math.max(v, o.width)
			}
			t.newline || (a[0] = g, a[1] = m, "horizontal" === h ? g = i + d : m = n + d)
		})
	}
	var nu = iu;
	A(iu, "vertical"), A(iu, "horizontal");

	function au(t, e, i) {
		i = Vl(i || 0);
		var n = e.width,
			a = e.height,
			o = xl(t.left, n),
			r = xl(t.top, a),
			s = xl(t.right, n),
			l = xl(t.bottom, a),
			u = xl(t.width, n),
			h = xl(t.height, a),
			c = i[2] + i[0],
			d = i[1] + i[3],
			f = t.aspect;
		switch (isNaN(u) && (u = n - s - d - o), isNaN(h) && (h = a - l - c - r), null != f && (isNaN(u) && isNaN(h) && (n /
			a < f ? u = .8 * n : h = .8 * a), isNaN(u) && (u = f * h), isNaN(h) && (h = u / f)), isNaN(o) && (o = n - s - u -
			d), isNaN(r) && (r = a - l - h - c), t.left || t.right) {
			case "center":
				o = n / 2 - u / 2 - i[3];
				break;
			case "right":
				o = n - u - d
		}
		switch (t.top || t.bottom) {
			case "middle":
			case "center":
				r = a / 2 - h / 2 - i[0];
				break;
			case "bottom":
				r = a - h - c
		}
		o = o || 0, r = r || 0, isNaN(u) && (u = n - d - o - (s || 0)), isNaN(h) && (h = a - c - r - (l || 0));
		var p = new bi(o + i[3], r + i[0], u, h);
		return p.margin = i, p
	}

	function ou(t, e, i, n, a) {
		var o = !a || !a.hv || a.hv[0],
			r = !a || !a.hv || a.hv[1],
			s = a && a.boundingMode || "all";
		if (o || r) {
			var l;
			if ("raw" === s) l = "group" === t.type ? new bi(0, 0, +e.width || 0, +e.height || 0) : t.getBoundingRect();
			else if (l = t.getBoundingRect(), t.needLocalTransform()) {
				var u = t.getLocalTransform();
				(l = l.clone()).applyTransform(u)
			}
			e = au(C({
				width: l.width,
				height: l.height
			}, e), i, n);
			var h = t.position,
				c = o ? e.x - l.x : 0,
				d = r ? e.y - l.y : 0;
			t.attr("position", "raw" === s ? [c, d] : [h[0] + c, h[1] + d])
		}
	}

	function ru(l, u, t) {
		z(t) || (t = {});
		var h = t.ignoreSize;
		k(h) || (h = [h, h]);
		var e = n(eu[0], 0),
			i = n(eu[1], 1);

		function n(t, e) {
			var i = {},
				n = 0,
				a = {},
				o = 0;
			if (Ql(t, function(t) {
					a[t] = l[t]
				}), Ql(t, function(t) {
					c(u, t) && (i[t] = a[t] = u[t]), d(i, t) && n++, d(a, t) && o++
				}), h[e]) return d(u, t[1]) ? a[t[2]] = null : d(u, t[2]) && (a[t[1]] = null), a;
			if (2 !== o && n) {
				if (2 <= n) return i;
				for (var r = 0; r < t.length; r++) {
					var s = t[r];
					if (!c(i, s) && c(l, s)) {
						i[s] = l[s];
						break
					}
				}
				return i
			}
			return a
		}

		function c(t, e) {
			return t.hasOwnProperty(e)
		}

		function d(t, e) {
			return null != t[e] && "auto" !== t[e]
		}

		function a(t, e, i) {
			Ql(t, function(t) {
				e[t] = i[t]
			})
		}
		a(eu[0], l, e), a(eu[1], l, i)
	}

	function su(t) {
		return lu({}, t)
	}

	function lu(e, i) {
		return i && e && Ql(tu, function(t) {
			i.hasOwnProperty(t) && (e[t] = i[t])
		}), e
	}
	var uu, hu, cu, du = La(),
		fu = dl.extend({
			type: "component",
			id: "",
			name: "",
			mainType: "",
			subType: "",
			componentIndex: 0,
			defaultOption: null,
			ecModel: null,
			dependentModels: [],
			uid: null,
			layoutMode: null,
			$constructor: function(t, e, i, n) {
				dl.call(this, t, e, i, n), this.uid = ml("ec_cpt_model")
			},
			init: function(t, e, i, n) {
				this.mergeDefaultAndTheme(t, i)
			},
			mergeDefaultAndTheme: function(t, e) {
				var i = this.layoutMode,
					n = i ? su(t) : {};
				m(t, e.getTheme().get(this.mainType)), m(t, this.getDefaultOption()), i && ru(t, n, i)
			},
			mergeOption: function(t, e) {
				m(this.option, t, !0);
				var i = this.layoutMode;
				i && ru(this.option, t, i)
			},
			optionUpdated: function(t, e) {},
			getDefaultOption: function() {
				var t = du(this);
				if (!t.defaultOption) {
					for (var e = [], i = this.constructor; i;) {
						var n = i.prototype.defaultOption;
						n && e.push(n), i = i.superClass
					}
					for (var a = {}, o = e.length - 1; 0 <= o; o--) a = m(a, e[o], !0);
					t.defaultOption = a
				}
				return t.defaultOption
			},
			getReferringComponents: function(t) {
				return this.ecModel.queryComponents({
					mainType: t,
					index: this.get(t + "Index", !0),
					id: this.get(t + "Id", !0)
				})
			}
		});

	function pu(t, e) {
		return t[e] || (t[e] = {
			predecessor: [],
			successor: []
		}), t[e]
	}
	Ua(fu, {
		registerWhenExtend: !0
	}), hu = {}, (uu = fu).registerSubTypeDefaulter = function(t, e) {
		t = Va(t), hu[t.main] = e
	}, uu.determineSubType = function(t, e) {
		var i = e.type;
		if (!i) {
			var n = Va(t).main;
			uu.hasSubTypes(t) && hu[n] && (i = hu[n](e))
		}
		return i
	}, cu = function(t) {
		var e = [];
		E(fu.getClassesByMainType(t), function(t) {
			e = e.concat(t.prototype.dependencies || [])
		}), e = N(e, function(t) {
			return Va(t).main
		}), "dataset" !== t && _(e, "dataset") <= 0 && e.unshift("dataset");
		return e
	}, fu.topologicalTravel = function(t, e, i, n) {
		if (t.length) {
			var a = function(e) {
					var a = {},
						o = [];
					return E(e, function(i) {
						var n = pu(a, i),
							t = function(t, e) {
								var i = [];
								return E(t, function(t) {
									0 <= _(e, t) && i.push(t)
								}), i
							}(n.originalDeps = cu(i), e);
						n.entryCount = t.length, 0 === n.entryCount && o.push(i), E(t, function(t) {
							_(n.predecessor, t) < 0 && n.predecessor.push(t);
							var e = pu(a, t);
							_(e.successor, t) < 0 && e.successor.push(i)
						})
					}), {
						graph: a,
						noEntryList: o
					}
				}(e),
				o = a.graph,
				r = a.noEntryList,
				s = {};
			for (E(t, function(t) {
					s[t] = !0
				}); r.length;) {
				var l = r.pop(),
					u = o[l],
					h = !!s[l];
				h && (i.call(n, l, u.originalDeps.slice()), delete s[l]), E(u.successor, h ? d : c)
			}
			E(s, function() {
				throw new Error("Circle dependency may exists")
			})
		}

		function c(t) {
			o[t].entryCount--, 0 === o[t].entryCount && r.push(t)
		}

		function d(t) {
			s[t] = !0, c(t)
		}
	}, b(fu, {
		getBoxLayoutParams: function() {
			return {
				left: this.get("left"),
				top: this.get("top"),
				right: this.get("right"),
				bottom: this.get("bottom"),
				width: this.get("width"),
				height: this.get("height")
			}
		}
	});
	var gu = "";
	"undefined" != typeof navigator && (gu = navigator.platform || "");
	var mu = {
			color: ["#009688", "#a6a6a6", "#61a0a8", "#d48265", "#91c7ae", "#749f83", "#ca8622", "#bda29a", "#6e7074",
				"#546570", "#c4ccd3"
			],
			gradientColor: ["#f6efa6", "#d88273", "#bf444c"],
			textStyle: {
				fontFamily: gu.match(/^Win/) ? "Microsoft YaHei" : "sans-serif",
				fontSize: 12,
				fontStyle: "normal",
				fontWeight: "normal"
			},
			blendMode: null,
			animation: "auto",
			animationDuration: 1e3,
			animationDurationUpdate: 300,
			animationEasing: "exponentialOut",
			animationEasingUpdate: "cubicOut",
			animationThreshold: 2e3,
			progressiveThreshold: 3e3,
			progressive: 400,
			hoverLayerThreshold: 3e3,
			useUTC: !1
		},
		vu = La();
	var yu = {
		clearColorPalette: function() {
			vu(this).colorIdx = 0, vu(this).colorNameMap = {}
		},
		getColorFromPalette: function(t, e, i) {
			var n = vu(e = e || this),
				a = n.colorIdx || 0,
				o = n.colorNameMap = n.colorNameMap || {};
			if (o.hasOwnProperty(t)) return o[t];
			var r = wa(this.get("color", !0)),
				s = this.get("colorLayer", !0),
				l = null != i && s ? function(t, e) {
					for (var i = t.length, n = 0; n < i; n++)
						if (t[n].length > e) return t[n];
					return t[i - 1]
				}(s, i) : r;
			if ((l = l || r) && l.length) {
				var u = l[a];
				return t && (o[t] = u), n.colorIdx = (a + 1) % l.length, u
			}
		}
	};

	function xu(t) {
		var e = t.get("coordinateSystem"),
			i = {
				coordSysName: e,
				coordSysDims: [],
				axisMap: Q(),
				categoryAxisMap: Q()
			},
			n = _u[e];
		if (n) return n(t, i, i.axisMap, i.categoryAxisMap), i
	}
	var _u = {
		cartesian2d: function(t, e, i, n) {
			var a = t.getReferringComponents("xAxis")[0],
				o = t.getReferringComponents("yAxis")[0];
			e.coordSysDims = ["x", "y"], i.set("x", a), i.set("y", o), wu(a) && (n.set("x", a), e.firstCategoryDimIndex = 0),
				wu(o) && (n.set("y", o), e.firstCategoryDimIndex = 1)
		},
		singleAxis: function(t, e, i, n) {
			var a = t.getReferringComponents("singleAxis")[0];
			e.coordSysDims = ["single"], i.set("single", a), wu(a) && (n.set("single", a), e.firstCategoryDimIndex = 0)
		},
		polar: function(t, e, i, n) {
			var a = t.getReferringComponents("polar")[0],
				o = a.findAxisModel("radiusAxis"),
				r = a.findAxisModel("angleAxis");
			e.coordSysDims = ["radius", "angle"], i.set("radius", o), i.set("angle", r), wu(o) && (n.set("radius", o), e.firstCategoryDimIndex =
				0), wu(r) && (n.set("angle", r), e.firstCategoryDimIndex = 1)
		},
		geo: function(t, e, i, n) {
			e.coordSysDims = ["lng", "lat"]
		},
		parallel: function(t, a, o, r) {
			var s = t.ecModel,
				e = s.getComponent("parallel", t.get("parallelIndex")),
				l = a.coordSysDims = e.dimensions.slice();
			E(e.parallelAxisIndex, function(t, e) {
				var i = s.getComponent("parallelAxis", t),
					n = l[e];
				o.set(n, i), wu(i) && null == a.firstCategoryDimIndex && (r.set(n, i), a.firstCategoryDimIndex = e)
			})
		}
	};

	function wu(t) {
		return "category" === t.get("type")
	}
	var bu = "original",
		Su = "arrayRows",
		Mu = "objectRows",
		Iu = "keyedColumns",
		Au = "unknown",
		Tu = "typedArray",
		Du = "column",
		Cu = "row";

	function Lu(t) {
		this.fromDataset = t.fromDataset, this.data = t.data || (t.sourceFormat === Iu ? {} : []), this.sourceFormat = t.sourceFormat ||
			Au, this.seriesLayoutBy = t.seriesLayoutBy || Du, this.dimensionsDefine = t.dimensionsDefine, this.encodeDefine = t
			.encodeDefine && Q(t.encodeDefine), this.startIndex = t.startIndex || 0, this.dimensionsDetectCount = t.dimensionsDetectCount
	}
	Lu.seriesDataToSource = function(t) {
		return new Lu({
			data: t,
			sourceFormat: V(t) ? Tu : bu,
			fromDataset: !1
		})
	}, Wa(Lu);
	var ku = La();

	function Pu(t) {
		var e = t.option,
			i = e.data,
			n = V(i) ? Tu : bu,
			a = !1,
			o = e.seriesLayoutBy,
			r = e.sourceHeader,
			s = e.dimensions,
			l = function(t) {
				var e = t.option;
				if (!e.data) return t.ecModel.getComponent("dataset", e.datasetIndex || 0)
			}(t);
		if (l) {
			var u = l.option;
			i = u.source, n = ku(l).sourceFormat, a = !0, o = o || u.seriesLayoutBy, null == r && (r = u.sourceHeader), s = s ||
				u.dimensions
		}
		var h = function(t, e, i, n, a) {
				if (!t) return {
					dimensionsDefine: Nu(a)
				};
				var o, r, s, l;
				if (e === Su) "auto" === n || null == n ? Ou(function(t) {
					null != t && "-" !== t && (R(t) ? null == r && (r = 1) : r = 0)
				}, i, t, 10) : r = n ? 1 : 0, a || 1 !== r || (a = [], Ou(function(t, e) {
					a[e] = null != t ? t : ""
				}, i, t)), o = a ? a.length : i === Cu ? t.length : t[0] ? t[0].length : null;
				else if (e === Mu) a || (a = function(t) {
					var e, i = 0;
					for (; i < t.length && !(e = t[i++]););
					if (e) {
						var n = [];
						return E(e, function(t, e) {
							n.push(e)
						}), n
					}
				}(t), s = !0);
				else if (e === Iu) a || (a = [], s = !0, E(t, function(t, e) {
					a.push(e)
				}));
				else if (e === bu) {
					var u = Ma(t[0]);
					o = k(u) && u.length || 1
				}
				s && E(a, function(t, e) {
					"name" === (z(t) ? t.name : t) && (l = e)
				});
				return {
					startIndex: r,
					dimensionsDefine: Nu(a),
					dimensionsDetectCount: o,
					potentialNameDimIndex: l
				}
			}(i, n, o, r, s),
			c = e.encode;
		!c && l && (c = function(t, e, i, n, a, o) {
			var r = xu(t),
				s = {},
				l = [],
				u = [],
				h = t.subType,
				c = Q(["pie", "map", "funnel"]),
				d = Q(["line", "bar", "pictorialBar", "scatter", "effectScatter", "candlestick", "boxplot"]);
			if (r && null != d.get(h)) {
				var f = t.ecModel,
					p = ku(f).datasetMap,
					g = e.uid + "_" + a,
					m = p.get(g) || p.set(g, {
						categoryWayDim: 1,
						valueWayDim: 0
					});
				E(r.coordSysDims, function(t) {
					if (null == r.firstCategoryDimIndex) {
						var e = m.valueWayDim++;
						s[t] = e, u.push(e)
					} else if (r.categoryAxisMap.get(t)) s[t] = 0, l.push(0);
					else {
						e = m.categoryWayDim++;
						s[t] = e, u.push(e)
					}
				})
			} else if (null != c.get(h)) {
				for (var v, y = 0; y < 5 && null == v; y++) Eu(i, n, a, o.dimensionsDefine, o.startIndex, y) || (v = y);
				if (null != v) {
					s.value = v;
					var x = o.potentialNameDimIndex || Math.max(v - 1, 0);
					u.push(x), l.push(x)
				}
			}
			return l.length && (s.itemName = l), u.length && (s.seriesName = u), s
		}(t, l, i, n, o, h)), ku(t).source = new Lu({
			data: i,
			fromDataset: a,
			seriesLayoutBy: o,
			sourceFormat: n,
			dimensionsDefine: h.dimensionsDefine,
			startIndex: h.startIndex,
			dimensionsDetectCount: h.dimensionsDetectCount,
			encodeDefine: c
		})
	}

	function Nu(t) {
		if (t) {
			var n = Q();
			return N(t, function(t, e) {
				if (null == (t = L({}, z(t) ? t : {
						name: t
					})).name) return t;
				t.name += "", null == t.displayName && (t.displayName = t.name);
				var i = n.get(t.name);
				return i ? t.name += "-" + i.count++ : n.set(t.name, {
					count: 1
				}), t
			})
		}
	}

	function Ou(t, e, i, n) {
		if (null == n && (n = 1 / 0), e === Cu)
			for (var a = 0; a < i.length && a < n; a++) t(i[a] ? i[a][0] : null, a);
		else {
			var o = i[0] || [];
			for (a = 0; a < o.length && a < n; a++) t(o[a], a)
		}
	}

	function Eu(t, e, i, n, a, o) {
		var r, s;
		if (V(t)) return !1;
		if (n && (s = z(s = n[o]) ? s.name : s), e === Su)
			if (i === Cu) {
				for (var l = t[o], u = 0; u < (l || []).length && u < 5; u++)
					if (null != (r = f(l[a + u]))) return r
			} else
				for (u = 0; u < t.length && u < 5; u++) {
					var h = t[a + u];
					if (h && null != (r = f(h[o]))) return r
				} else if (e === Mu) {
					if (!s) return;
					for (u = 0; u < t.length && u < 5; u++) {
						if ((c = t[u]) && null != (r = f(c[s]))) return r
					}
				} else if (e === Iu) {
			if (!s) return;
			if (!(l = t[s]) || V(l)) return !1;
			for (u = 0; u < l.length && u < 5; u++)
				if (null != (r = f(l[u]))) return r
		} else if (e === bu)
			for (u = 0; u < t.length && u < 5; u++) {
				var c, d = Ma(c = t[u]);
				if (!k(d)) return !1;
				if (null != (r = f(d[o]))) return r
			}

		function f(t) {
			return (null == t || !isFinite(t) || "" === t) && (!(!R(t) || "-" === t) || void 0)
		}
		return !1
	}
	var Ru = "\0_ec_inner",
		zu = dl.extend({
			init: function(t, e, i, n) {
				i = i || {}, this.option = null, this._theme = new dl(i), this._optionManager = n
			},
			setOption: function(t, e) {
				Y(!(Ru in t), "please use chart.getOption()"), this._optionManager.setOption(t, e), this.resetOption(null)
			},
			resetOption: function(t) {
				var e = !1,
					i = this._optionManager;
				if (!t || "recreate" === t) {
					var n = i.mountOption("recreate" === t);
					this.option && "recreate" !== t ? (this.restoreData(), this.mergeOption(n)) : function(t) {
						t = t, this.option = {}, this.option[Ru] = 1, this._componentsMap = Q({
								series: []
							}), this._seriesIndices, this._seriesIndicesMap,
							function(i, t) {
								var n = i.color && !i.colorLayer;
								E(t, function(t, e) {
									"colorLayer" === e && n || fu.hasClass(e) || ("object" == typeof t ? i[e] = i[e] ? m(i[e], t, !1) : D(t) :
										null == i[e] && (i[e] = t))
								})
							}(t, this._theme.option), m(t, mu, !1), this.mergeOption(t)
					}.call(this, n), e = !0
				}
				if ("timeline" !== t && "media" !== t || this.restoreData(), !t || "recreate" === t || "timeline" === t) {
					var a = i.getTimelineOption(this);
					a && (this.mergeOption(a), e = !0)
				}
				if (!t || "recreate" === t || "media" === t) {
					var o = i.getMediaOption(this, this._api);
					o.length && E(o, function(t) {
						this.mergeOption(t, e = !0)
					}, this)
				}
				return e
			},
			mergeOption: function(n) {
				var l = this.option,
					u = this._componentsMap,
					i = [];
				! function(t) {
					ku(t).datasetMap = Q()
				}(this), E(n, function(t, e) {
					null != t && (fu.hasClass(e) ? e && i.push(e) : l[e] = null == l[e] ? D(t) : m(l[e], t, !0))
				}), fu.topologicalTravel(i, fu.getAllClassMainTypes(), function(r, t) {
					var e = wa(n[r]),
						i = Ia(u.get(r), e);
					Aa(i), E(i, function(t, e) {
						var i = t.option;
						z(i) && (t.keyInfo.mainType = r, t.keyInfo.subType = function(t, e, i) {
							return e.type ? e.type : i ? i.subType : fu.determineSubType(t, e)
						}(r, i, t.exist))
					});
					var s = function(e, t) {
						k(t) || (t = t ? [t] : []);
						var i = {};
						return E(t, function(t) {
							i[t] = (e.get(t) || []).slice()
						}), i
					}(u, t);
					l[r] = [], u.set(r, []), E(i, function(t, e) {
						var i = t.exist,
							n = t.option;
						if (Y(z(n) || i, "Empty component definition"), n) {
							var a = fu.getClass(r, t.keyInfo.subType, !0);
							if (i && i.constructor === a) i.name = t.keyInfo.name, i.mergeOption(n, this), i.optionUpdated(n, !1);
							else {
								var o = L({
									dependentModels: s,
									componentIndex: e
								}, t.keyInfo);
								L(i = new a(n, this, this, o), o), i.init(n, this, this, o), i.optionUpdated(null, !0)
							}
						} else i.mergeOption({}, this), i.optionUpdated({}, !1);
						u.get(r)[e] = i, l[r][e] = i.option
					}, this), "series" === r && Bu(this, u.get("series"))
				}, this), this._seriesIndicesMap = Q(this._seriesIndices = this._seriesIndices || [])
			},
			getOption: function() {
				var n = D(this.option);
				return E(n, function(t, e) {
					if (fu.hasClass(e)) {
						for (var i = (t = wa(t)).length - 1; 0 <= i; i--) Da(t[i]) && t.splice(i, 1);
						n[e] = t
					}
				}), delete n[Ru], n
			},
			getTheme: function() {
				return this._theme
			},
			getComponent: function(t, e) {
				var i = this._componentsMap.get(t);
				if (i) return i[e || 0]
			},
			queryComponents: function(t) {
				var e = t.mainType;
				if (!e) return [];
				var i, n = t.index,
					a = t.id,
					o = t.name,
					r = this._componentsMap.get(e);
				if (!r || !r.length) return [];
				if (null != n) k(n) || (n = [n]), i = M(N(n, function(t) {
					return r[t]
				}), function(t) {
					return !!t
				});
				else if (null != a) {
					var s = k(a);
					i = M(r, function(t) {
						return s && 0 <= _(a, t.id) || !s && t.id === a
					})
				} else if (null != o) {
					var l = k(o);
					i = M(r, function(t) {
						return l && 0 <= _(o, t.name) || !l && t.name === o
					})
				} else i = r.slice();
				return Vu(i, t)
			},
			findComponents: function(t) {
				var e, i, n, a, o, r = t.query,
					s = t.mainType,
					l = (i = s + "Index", n = s + "Id", a = s + "Name", !(e = r) || null == e[i] && null == e[n] && null == e[a] ?
						null : {
							mainType: s,
							index: e[i],
							id: e[n],
							name: e[a]
						}),
					u = l ? this.queryComponents(l) : this._componentsMap.get(s);
				return o = Vu(u, t), t.filter ? M(o, t.filter) : o
			},
			eachComponent: function(t, n, a) {
				var e = this._componentsMap;
				if ("function" == typeof t) a = n, n = t, e.each(function(t, i) {
					E(t, function(t, e) {
						n.call(a, i, t, e)
					})
				});
				else if (R(t)) E(e.get(t), n, a);
				else if (z(t)) {
					E(this.findComponents(t), n, a)
				}
			},
			getSeriesByName: function(e) {
				return M(this._componentsMap.get("series"), function(t) {
					return t.name === e
				})
			},
			getSeriesByIndex: function(t) {
				return this._componentsMap.get("series")[t]
			},
			getSeriesByType: function(e) {
				return M(this._componentsMap.get("series"), function(t) {
					return t.subType === e
				})
			},
			getSeries: function() {
				return this._componentsMap.get("series").slice()
			},
			getSeriesCount: function() {
				return this._componentsMap.get("series").length
			},
			eachSeries: function(i, n) {
				E(this._seriesIndices, function(t) {
					var e = this._componentsMap.get("series")[t];
					i.call(n, e, t)
				}, this)
			},
			eachRawSeries: function(t, e) {
				E(this._componentsMap.get("series"), t, e)
			},
			eachSeriesByType: function(i, n, a) {
				E(this._seriesIndices, function(t) {
					var e = this._componentsMap.get("series")[t];
					e.subType === i && n.call(a, e, t)
				}, this)
			},
			eachRawSeriesByType: function(t, e, i) {
				return E(this.getSeriesByType(t), e, i)
			},
			isSeriesFiltered: function(t) {
				return null == this._seriesIndicesMap.get(t.componentIndex)
			},
			getCurrentSeriesIndices: function() {
				return (this._seriesIndices || []).slice()
			},
			filterSeries: function(t, e) {
				var i = M(this._componentsMap.get("series"), t, e);
				Bu(this, i)
			},
			restoreData: function(i) {
				var n = this._componentsMap;
				Bu(this, n.get("series"));
				var a = [];
				n.each(function(t, e) {
					a.push(e)
				}), fu.topologicalTravel(a, fu.getAllClassMainTypes(), function(e, t) {
					E(n.get(e), function(t) {
						"series" === e && function(t, e) {
							if (e) {
								var i = e.seiresIndex,
									n = e.seriesId,
									a = e.seriesName;
								return null != i && t.componentIndex !== i || null != n && t.id !== n || null != a && t.name !== a
							}
						}(t, i) || t.restoreData()
					})
				})
			}
		});

	function Bu(t, e) {
		t._seriesIndicesMap = Q(t._seriesIndices = N(e, function(t) {
			return t.componentIndex
		}) || [])
	}

	function Vu(t, e) {
		return e.hasOwnProperty("subType") ? M(t, function(t) {
			return t.subType === e.subType
		}) : t
	}
	b(zu, yu);
	var Gu = ["getDom", "getZr", "getWidth", "getHeight", "getDevicePixelRatio", "dispatchAction", "isDisposed", "on",
		"off", "getDataURL", "getConnectedDataURL", "getModel", "getOption", "getViewOfComponentModel",
		"getViewOfSeriesModel"
	];

	function Fu(e) {
		E(Gu, function(t) {
			this[t] = T(e[t], e)
		}, this)
	}
	var Wu = {};

	function Hu() {
		this._coordinateSystems = []
	}
	Hu.prototype = {
		constructor: Hu,
		create: function(n, a) {
			var o = [];
			E(Wu, function(t, e) {
				var i = t.create(n, a);
				o = o.concat(i || [])
			}), this._coordinateSystems = o
		},
		update: function(e, i) {
			E(this._coordinateSystems, function(t) {
				t.update && t.update(e, i)
			})
		},
		getCoordinateSystems: function() {
			return this._coordinateSystems.slice()
		}
	}, Hu.register = function(t, e) {
		Wu[t] = e
	}, Hu.get = function(t) {
		return Wu[t]
	};
	var Zu = E,
		Uu = D,
		Xu = N,
		Yu = m,
		ju = /^(min|max)?(.+)$/;

	function qu(t) {
		this._api = t, this._timelineOptions = [], this._mediaList = [], this._mediaDefault, this._currentMediaIndices = [],
			this._optionBackup, this._newBaseOption
	}

	function Ku(t, e, i) {
		var o = {
				width: e,
				height: i,
				aspectratio: e / i
			},
			r = !0;
		return E(t, function(t, e) {
			var i = e.match(ju);
			if (i && i[1] && i[2]) {
				var n = i[1],
					a = i[2].toLowerCase();
				! function(t, e, i) {
					return "min" === i ? e <= t : "max" === i ? t <= e : t === e
				}(o[a], t, n) && (r = !1)
			}
		}), r
	}
	qu.prototype = {
		constructor: qu,
		setOption: function(t, e) {
			t && E(wa(t.series), function(t) {
				t && t.data && V(t.data) && K(t.data)
			}), t = Uu(t);
			var i = this._optionBackup,
				n = function(t, i, n) {
					var e, a, o = [],
						r = [],
						s = t.timeline;
					t.baseOption && (a = t.baseOption);
					(s || t.options) && (a = a || {}, o = (t.options || []).slice());
					if (t.media) {
						a = a || {};
						var l = t.media;
						Zu(l, function(t) {
							t && t.option && (t.query ? r.push(t) : e = e || t)
						})
					}
					a = a || t;
					a.timeline || (a.timeline = s);
					return Zu([a].concat(o).concat(N(r, function(t) {
						return t.option
					})), function(e) {
						Zu(i, function(t) {
							t(e, n)
						})
					}), {
						baseOption: a,
						timelineOptions: o,
						mediaDefault: e,
						mediaList: r
					}
				}.call(this, t, e, !i);
			this._newBaseOption = n.baseOption, i ? (function(a, t) {
						Zu(t = t || {}, function(t, e) {
							if (null != t) {
								var i = a[e];
								if (fu.hasClass(e)) {
									t = wa(t);
									var n = Ia(i = wa(i), t);
									a[e] = Xu(n, function(t) {
										return t.option && t.exist ? Yu(t.exist, t.option, !0) : t.exist || t.option
									})
								} else a[e] = Yu(i, t, !0)
							}
						})
					}(i.baseOption, n.baseOption), n.timelineOptions.length && (i.timelineOptions = n.timelineOptions), n.mediaList
					.length && (i.mediaList = n.mediaList), n.mediaDefault && (i.mediaDefault = n.mediaDefault)) : this._optionBackup =
				n
		},
		mountOption: function(t) {
			var e = this._optionBackup;
			return this._timelineOptions = Xu(e.timelineOptions, Uu), this._mediaList = Xu(e.mediaList, Uu), this._mediaDefault =
				Uu(e.mediaDefault), this._currentMediaIndices = [], Uu(t ? e.baseOption : this._newBaseOption)
		},
		getTimelineOption: function(t) {
			var e, i = this._timelineOptions;
			if (i.length) {
				var n = t.getComponent("timeline");
				n && (e = Uu(i[n.getCurrentIndex()], !0))
			}
			return e
		},
		getMediaOption: function(t) {
			var e = this._api.getWidth(),
				i = this._api.getHeight(),
				n = this._mediaList,
				a = this._mediaDefault,
				o = [],
				r = [];
			if (!n.length && !a) return r;
			for (var s = 0, l = n.length; s < l; s++) Ku(n[s].query, e, i) && o.push(s);
			return !o.length && a && (o = [-1]), o.length && ! function(t, e) {
				return t.join(",") === e.join(",")
			}(o, this._currentMediaIndices) && (r = Xu(o, function(t) {
				return Uu(-1 === t ? a.option : n[t].option)
			})), this._currentMediaIndices = o, r
		}
	};
	var $u = E,
		Ju = z,
		Qu = ["areaStyle", "lineStyle", "nodeStyle", "linkStyle", "chordStyle", "label", "labelLine"];

	function th(t) {
		var e = t && t.itemStyle;
		if (e)
			for (var i = 0, n = Qu.length; i < n; i++) {
				var a = Qu[i],
					o = e.normal,
					r = e.emphasis;
				o && o[a] && (t[a] = t[a] || {}, t[a].normal ? m(t[a].normal, o[a]) : t[a].normal = o[a], o[a] = null), r && r[a] &&
					(t[a] = t[a] || {}, t[a].emphasis ? m(t[a].emphasis, r[a]) : t[a].emphasis = r[a], r[a] = null)
			}
	}

	function eh(t, e, i) {
		if (t && t[e] && (t[e].normal || t[e].emphasis)) {
			var n = t[e].normal,
				a = t[e].emphasis;
			n && (i ? (t[e].normal = t[e].emphasis = null, C(t[e], n)) : t[e] = n), a && (t.emphasis = t.emphasis || {}, t.emphasis[
				e] = a)
		}
	}

	function ih(t) {
		eh(t, "itemStyle"), eh(t, "lineStyle"), eh(t, "areaStyle"), eh(t, "label"), eh(t, "labelLine"), eh(t, "upperLabel"),
			eh(t, "edgeLabel")
	}

	function nh(t, e) {
		var i = Ju(t) && t[e],
			n = Ju(i) && i.textStyle;
		if (n)
			for (var a = 0, o = Sa.length; a < o; a++) {
				e = Sa[a];
				n.hasOwnProperty(e) && (i[e] = n[e])
			}
	}

	function ah(t) {
		t && (ih(t), nh(t, "label"), t.emphasis && nh(t.emphasis, "label"))
	}

	function oh(t) {
		return k(t) ? t : t ? [t] : []
	}

	function rh(t) {
		return (k(t) ? t[0] : t) || {}
	}

	function sh(e, t) {
		$u(oh(e.series), function(t) {
			Ju(t) && function(t) {
				if (Ju(t)) {
					th(t), ih(t), nh(t, "label"), nh(t, "upperLabel"), nh(t, "edgeLabel"), t.emphasis && (nh(t.emphasis, "label"),
							nh(t.emphasis, "upperLabel"), nh(t.emphasis, "edgeLabel")), (i = t.markPoint) && (th(i), ah(i)), (n = t.markLine) &&
						(th(n), ah(n));
					var e = t.markArea;
					e && ah(e);
					var i, n, a = t.data;
					if ("graph" === t.type) {
						a = a || t.nodes;
						var o = t.links || t.edges;
						if (o && !V(o))
							for (var r = 0; r < o.length; r++) ah(o[r]);
						E(t.categories, function(t) {
							ih(t)
						})
					}
					if (a && !V(a))
						for (r = 0; r < a.length; r++) ah(a[r]);
					if ((i = t.markPoint) && i.data) {
						var s = i.data;
						for (r = 0; r < s.length; r++) ah(s[r])
					}
					if ((n = t.markLine) && n.data) {
						var l = n.data;
						for (r = 0; r < l.length; r++) k(l[r]) ? (ah(l[r][0]), ah(l[r][1])) : ah(l[r])
					}
					"gauge" === t.type ? (nh(t, "axisLabel"), nh(t, "title"), nh(t, "detail")) : "treemap" === t.type ? (eh(t.breadcrumb,
						"itemStyle"), E(t.levels, function(t) {
						ih(t)
					})) : "tree" === t.type && ih(t.leaves)
				}
			}(t)
		});
		var i = ["xAxis", "yAxis", "radiusAxis", "angleAxis", "singleAxis", "parallelAxis", "radar"];
		t && i.push("valueAxis", "categoryAxis", "logAxis", "timeAxis"), $u(i, function(t) {
			$u(oh(e[t]), function(t) {
				t && (nh(t, "axisLabel"), nh(t.axisPointer, "label"))
			})
		}), $u(oh(e.parallel), function(t) {
			var e = t && t.parallelAxisDefault;
			nh(e, "axisLabel"), nh(e && e.axisPointer, "label")
		}), $u(oh(e.calendar), function(t) {
			eh(t, "itemStyle"), nh(t, "dayLabel"), nh(t, "monthLabel"), nh(t, "yearLabel")
		}), $u(oh(e.radar), function(t) {
			nh(t, "name")
		}), $u(oh(e.geo), function(t) {
			Ju(t) && (ah(t), $u(oh(t.regions), function(t) {
				ah(t)
			}))
		}), $u(oh(e.timeline), function(t) {
			ah(t), eh(t, "label"), eh(t, "itemStyle"), eh(t, "controlStyle", !0);
			var e = t.data;
			k(e) && E(e, function(t) {
				z(t) && (eh(t, "label"), eh(t, "itemStyle"))
			})
		}), $u(oh(e.toolbox), function(t) {
			eh(t, "iconStyle"), $u(t.feature, function(t) {
				eh(t, "iconStyle")
			})
		}), nh(rh(e.axisPointer), "label"), nh(rh(e.tooltip).axisPointer, "label")
	}

	function lh(e) {
		E(uh, function(t) {
			t[0] in e && !(t[1] in e) && (e[t[1]] = e[t[0]])
		})
	}
	var uh = [
			["x", "left"],
			["y", "top"],
			["x2", "right"],
			["y2", "bottom"]
		],
		hh = ["grid", "geo", "parallel", "legend", "toolbox", "title", "visualMap", "dataZoom", "timeline"],
		ch = function(i, t) {
			sh(i, t), i.series = wa(i.series), E(i.series, function(t) {
				if (z(t)) {
					var e = t.type;
					if ("line" === e) null != t.clipOverflow && (t.clip = t.clipOverflow);
					else if ("pie" === e || "gauge" === e) null != t.clockWise && (t.clockwise = t.clockWise);
					else if ("gauge" === e) {
						var i = function(t, e) {
							e = e.split(",");
							for (var i = t, n = 0; n < e.length && null != (i = i && i[e[n]]); n++);
							return i
						}(t, "pointer.color");
						null != i && function(t, e, i, n) {
							e = e.split(",");
							for (var a, o = t, r = 0; r < e.length - 1; r++) null == o[a = e[r]] && (o[a] = {}), o = o[a];
							!n && null != o[e[r]] || (o[e[r]] = i)
						}(t, "itemStyle.color", i)
					}
					lh(t)
				}
			}), i.dataRange && (i.visualMap = i.dataRange), E(hh, function(t) {
				var e = i[t];
				e && (k(e) || (e = [e]), E(e, function(t) {
					lh(t)
				}))
			})
		};

	function dh(m) {
		E(m, function(h, c) {
			var d = [],
				f = [NaN, NaN],
				t = [h.stackResultDimension, h.stackedOverDimension],
				p = h.data,
				g = h.isStackedByIndex,
				e = p.map(t, function(t, e, i) {
					var n, a, o = p.get(h.stackedDimension, i);
					if (isNaN(o)) return f;
					g ? a = p.getRawIndex(i) : n = p.get(h.stackedByDimension, i);
					for (var r = NaN, s = c - 1; 0 <= s; s--) {
						var l = m[s];
						if (g || (a = l.data.rawIndexOf(l.stackedByDimension, n)), 0 <= a) {
							var u = l.data.getByRawIndex(l.stackResultDimension, a);
							if (0 <= o && 0 < u || o <= 0 && u < 0) {
								o += u, r = u;
								break
							}
						}
					}
					return d[0] = o, d[1] = r, d
				});
			p.hostModel.setData(e), h.data = e
		})
	}

	function fh(t, e) {
		Lu.isInstance(t) || (t = Lu.seriesDataToSource(t)), this._source = t;
		var i = this._data = t.data,
			n = t.sourceFormat;
		n === Tu && (this._offset = 0, this._dimSize = e, this._data = i), L(this, gh[n === Su ? n + "_" + t.seriesLayoutBy :
			n])
	}
	var ph = fh.prototype;
	ph.pure = !1;
	var gh = {
		arrayRows_column: {
			pure: ph.persistent = !0,
			count: function() {
				return Math.max(0, this._data.length - this._source.startIndex)
			},
			getItem: function(t) {
				return this._data[t + this._source.startIndex]
			},
			appendData: yh
		},
		arrayRows_row: {
			pure: !0,
			count: function() {
				var t = this._data[0];
				return t ? Math.max(0, t.length - this._source.startIndex) : 0
			},
			getItem: function(t) {
				t += this._source.startIndex;
				for (var e = [], i = this._data, n = 0; n < i.length; n++) {
					var a = i[n];
					e.push(a ? a[t] : null)
				}
				return e
			},
			appendData: function() {
				throw new Error('Do not support appendData when set seriesLayoutBy: "row".')
			}
		},
		objectRows: {
			pure: !0,
			count: mh,
			getItem: vh,
			appendData: yh
		},
		keyedColumns: {
			pure: !0,
			count: function() {
				var t = this._source.dimensionsDefine[0].name,
					e = this._data[t];
				return e ? e.length : 0
			},
			getItem: function(t) {
				for (var e = [], i = this._source.dimensionsDefine, n = 0; n < i.length; n++) {
					var a = this._data[i[n].name];
					e.push(a ? a[t] : null)
				}
				return e
			},
			appendData: function(t) {
				var a = this._data;
				E(t, function(t, e) {
					for (var i = a[e] || (a[e] = []), n = 0; n < (t || []).length; n++) i.push(t[n])
				})
			}
		},
		original: {
			count: mh,
			getItem: vh,
			appendData: yh
		},
		typedArray: {
			persistent: !(ph.getSource = function() {
				return this._source
			}),
			pure: !0,
			count: function() {
				return this._data ? this._data.length / this._dimSize : 0
			},
			getItem: function(t, e) {
				t -= this._offset, e = e || [];
				for (var i = this._dimSize * t, n = 0; n < this._dimSize; n++) e[n] = this._data[i + n];
				return e
			},
			appendData: function(t) {
				this._data = t
			},
			clean: function() {
				this._offset += this.count(), this._data = null
			}
		}
	};

	function mh() {
		return this._data.length
	}

	function vh(t) {
		return this._data[t]
	}

	function yh(t) {
		for (var e = 0; e < t.length; e++) this._data.push(t[e])
	}
	var xh = {
		arrayRows: _h,
		objectRows: function(t, e, i, n) {
			return null != i ? t[n] : t
		},
		keyedColumns: _h,
		original: function(t, e, i, n) {
			var a = Ma(t);
			return null != i && a instanceof Array ? a[i] : a
		},
		typedArray: _h
	};

	function _h(t, e, i, n) {
		return null != i ? t[i] : t
	}
	var wh = {
		arrayRows: bh,
		objectRows: function(t, e, i, n) {
			return Sh(t[e], this._dimensionInfos[e])
		},
		keyedColumns: bh,
		original: function(t, e, i, n) {
			var a = t && (null == t.value ? t : t.value);
			return !this._rawData.pure && function(t) {
				return ya(t) && !(t instanceof Array)
			}(t) && (this.hasItemOption = !0), Sh(a instanceof Array ? a[n] : a, this._dimensionInfos[e])
		},
		typedArray: function(t, e, i, n) {
			return t[n]
		}
	};

	function bh(t, e, i, n) {
		return Sh(t[n], this._dimensionInfos[e])
	}

	function Sh(t, e) {
		var i = e && e.type;
		if ("ordinal" !== i) return "time" === i && "number" != typeof t && null != t && "-" !== t && (t = +Ll(t)), null ==
			t || "" === t ? NaN : +t;
		var n = e && e.ordinalMeta;
		return n ? n.parseAndCollect(t) : t
	}

	function Mh(t, e, i) {
		if (t) {
			var n = t.getRawDataItem(e);
			if (null != n) {
				var a, o, r = t.getProvider().getSource().sourceFormat,
					s = t.getDimensionInfo(i);
				return s && (a = s.name, o = s.index), xh[r](n, e, o, a)
			}
		}
	}

	function Ih(t, e, i) {
		if (t) {
			var n = t.getProvider().getSource().sourceFormat;
			if (n === bu || n === Mu) {
				var a = t.getRawDataItem(e);
				return n !== bu || z(a) || (a = null), a ? a[i] : void 0
			}
		}
	}
	var Ah = /\{@(.+?)\}/g,
		Th = {
			getDataParams: function(t, e) {
				var i = this.getData(e),
					n = this.getRawValue(t, e),
					a = i.getRawIndex(t),
					o = i.getName(t),
					r = i.getRawDataItem(t),
					s = i.getItemVisual(t, "color"),
					l = i.getItemVisual(t, "borderColor"),
					u = this.ecModel.getComponent("tooltip"),
					h = Ea(u && u.get("renderMode")),
					c = this.mainType,
					d = "series" === c,
					f = i.userOutput;
				return {
					componentType: c,
					componentSubType: this.subType,
					componentIndex: this.componentIndex,
					seriesType: d ? this.subType : null,
					seriesIndex: this.seriesIndex,
					seriesId: d ? this.id : null,
					seriesName: d ? this.name : null,
					name: o,
					dataIndex: a,
					data: r,
					dataType: e,
					value: n,
					color: s,
					borderColor: l,
					dimensionNames: f ? f.dimensionNames : null,
					encode: f ? f.encode : null,
					marker: Yl({
						color: s,
						renderMode: h
					}),
					$vars: ["seriesName", "name", "value"]
				}
			},
			getFormattedLabel: function(n, t, e, i, a) {
				t = t || "normal";
				var o = this.getData(e),
					r = o.getItemModel(n),
					s = this.getDataParams(n, e);
				null != i && s.value instanceof Array && (s.value = s.value[i]);
				var l = r.get("normal" === t ? [a || "label", "formatter"] : [t, a || "label", "formatter"]);
				return "function" == typeof l ? (s.status = t, s.dimensionIndex = i, l(s)) : "string" == typeof l ? Ul(l, s).replace(
					Ah,
					function(t, e) {
						var i = e.length;
						return "[" === e.charAt(0) && "]" === e.charAt(i - 1) && (e = +e.slice(1, i - 1)), Mh(o, n, e)
					}) : void 0
			},
			getRawValue: function(t, e) {
				return Mh(this.getData(e), t)
			},
			formatTooltip: function() {}
		};

	function Dh(t) {
		return new Ch(t)
	}

	function Ch(t) {
		t = t || {}, this._reset = t.reset, this._plan = t.plan, this._count = t.count, this._onDirty = t.onDirty, this._dirty = !
			0, this.context
	}
	var Lh = Ch.prototype;
	Lh.perform = function(t) {
		var e, i = this._upstream,
			n = t && t.skip;
		if (this._dirty && i) {
			var a = this.context;
			a.data = a.outputData = i.context.outputData
		}
		this.__pipeline && (this.__pipeline.currentTask = this), this._plan && !n && (e = this._plan(this.context));
		var o, r = h(this._modBy),
			s = this._modDataCount || 0,
			l = h(t && t.modBy),
			u = t && t.modDataCount || 0;

		function h(t) {
			return 1 <= t || (t = 1), t
		}
		r === l && s === u || (e = "reset"), !this._dirty && "reset" !== e || (this._dirty = !1, o = function(t, e) {
			var i, n;
			t._dueIndex = t._outputDueEnd = t._dueEnd = 0, t._settedOutputEnd = null, !e && t._reset && ((i = t._reset(t.context)) &&
				i.progress && (n = i.forceFirstProgress, i = i.progress), k(i) && !i.length && (i = null));
			t._progress = i, t._modBy = t._modDataCount = null;
			var a = t._downstream;
			return a && a.dirty(), n
		}(this, n)), this._modBy = l, this._modDataCount = u;
		var c = t && t.step;
		if (this._dueEnd = i ? i._outputDueEnd : this._count ? this._count(this.context) : 1 / 0, this._progress) {
			var d = this._dueIndex,
				f = Math.min(null != c ? this._dueIndex + c : 1 / 0, this._dueEnd);
			if (!n && (o || d < f)) {
				var p = this._progress;
				if (k(p))
					for (var g = 0; g < p.length; g++) Gh(this, p[g], d, f, l, u);
				else Gh(this, p, d, f, l, u)
			}
			this._dueIndex = f;
			var m = null != this._settedOutputEnd ? this._settedOutputEnd : f;
			this._outputDueEnd = m
		} else this._dueIndex = this._outputDueEnd = null != this._settedOutputEnd ? this._settedOutputEnd : this._dueEnd;
		return this.unfinished()
	};
	var kh, Ph, Nh, Oh, Eh, Rh, zh = Rh = {
		reset: function(t, e, i, n) {
			Ph = t, kh = e, Nh = i, Oh = n, Eh = Math.ceil(Oh / Nh), Rh.next = 1 < Nh && 0 < Oh ? Vh : Bh
		}
	};

	function Bh() {
		return Ph < kh ? Ph++ : null
	}

	function Vh() {
		var t = Ph % Eh * Nh + Math.ceil(Ph / Eh),
			e = kh <= Ph ? null : t < Oh ? t : Ph;
		return Ph++, e
	}

	function Gh(t, e, i, n, a, o) {
		zh.reset(i, n, a, o), t._callingProgress = e, t._callingProgress({
			start: i,
			end: n,
			count: n - i,
			next: zh.next
		}, t.context)
	}
	Lh.dirty = function() {
		this._dirty = !0, this._onDirty && this._onDirty(this.context)
	}, Lh.unfinished = function() {
		return this._progress && this._dueIndex < this._dueEnd
	}, Lh.pipe = function(t) {
		this._downstream === t && !this._dirty || ((this._downstream = t)._upstream = this, t.dirty())
	}, Lh.dispose = function() {
		this._disposed || (this._upstream && (this._upstream._downstream = null), this._downstream && (this._downstream._upstream =
			null), this._dirty = !1, this._disposed = !0)
	}, Lh.getUpstream = function() {
		return this._upstream
	}, Lh.getDownstream = function() {
		return this._downstream
	}, Lh.setOutputEnd = function(t) {
		this._outputDueEnd = this._settedOutputEnd = t
	};
	var Fh = La(),
		Wh = fu.extend({
			type: "series.__base__",
			seriesIndex: 0,
			coordinateSystem: null,
			defaultOption: null,
			legendDataProvider: null,
			visualColorAccessPath: "itemStyle.color",
			visualBorderColorAccessPath: "itemStyle.borderColor",
			layoutMode: null,
			init: function(t, e, i, n) {
				this.seriesIndex = this.componentIndex, this.dataTask = Dh({
					count: Zh,
					reset: Uh
				}), this.dataTask.context = {
					model: this
				}, this.mergeDefaultAndTheme(t, i), Pu(this);
				var a = this.getInitialData(t, i);
				Yh(a, this), this.dataTask.context.data = a, Fh(this).dataBeforeProcessed = a, Hh(this)
			},
			mergeDefaultAndTheme: function(t, e) {
				var i = this.layoutMode,
					n = i ? su(t) : {},
					a = this.subType;
				fu.hasClass(a) && (a += "Series"), m(t, e.getTheme().get(this.subType)), m(t, this.getDefaultOption()), ba(t,
					"label", ["show"]), this.fillDataTextStyle(t.data), i && ru(t, n, i)
			},
			mergeOption: function(t, e) {
				t = m(this.option, t, !0), this.fillDataTextStyle(t.data);
				var i = this.layoutMode;
				i && ru(this.option, t, i), Pu(this);
				var n = this.getInitialData(t, e);
				Yh(n, this), this.dataTask.dirty(), this.dataTask.context.data = n, Fh(this).dataBeforeProcessed = n, Hh(this)
			},
			fillDataTextStyle: function(t) {
				if (t && !V(t))
					for (var e = ["show"], i = 0; i < t.length; i++) t[i] && t[i].label && ba(t[i], "label", e)
			},
			getInitialData: function() {},
			appendData: function(t) {
				this.getRawData().appendData(t.data)
			},
			getData: function(t) {
				var e = qh(this);
				if (e) {
					var i = e.context.data;
					return null == t ? i : i.getLinkedData(t)
				}
				return Fh(this).data
			},
			setData: function(t) {
				var e = qh(this);
				if (e) {
					var i = e.context;
					i.data !== t && e.modifyOutputEnd && e.setOutputEnd(t.count()), i.outputData = t, e !== this.dataTask && (i.data =
						t)
				}
				Fh(this).data = t
			},
			getSource: function() {
				return function(t) {
					return ku(t).source
				}(this)
			},
			getRawData: function() {
				return Fh(this).dataBeforeProcessed
			},
			getBaseAxis: function() {
				var t = this.coordinateSystem;
				return t && t.getBaseAxis && t.getBaseAxis()
			},
			formatTooltip: function(a, h, t, c) {
				var d = this,
					e = "html" === (c = c || "html") ? "<br/>" : "\n",
					f = "richText" === c,
					p = {},
					g = 0;

				function i(t) {
					return {
						renderMode: c,
						content: Wl(zl(t)),
						style: p
					}
				}
				var m = this.getData(),
					o = m.mapDimension("defaultedTooltip", !0),
					n = o.length,
					r = this.getRawValue(a),
					s = k(r),
					v = m.getItemVisual(a, "color");
				z(v) && v.colorStops && (v = (v.colorStops[0] || {}).color), v = v || "transparent";
				var l = (1 < n || s && !n ? function(t) {
						var l = S(t, function(t, e, i) {
								var n = m.getDimensionInfo(i);
								return t | (n && !1 !== n.tooltip && null != n.displayName)
							}, 0),
							u = [];

						function e(t, e) {
							var i = m.getDimensionInfo(e);
							if (i && !1 !== i.otherDims.tooltip) {
								var n = i.type,
									a = "sub" + d.seriesIndex + "at" + g,
									o = Yl({
										color: v,
										type: "subItem",
										renderMode: c,
										markerId: a
									}),
									r = "string" == typeof o ? o : o.content,
									s = (l ? r + Wl(i.displayName || "-") + ": " : "") + Wl("ordinal" === n ? t + "" : "time" === n ? h ? "" :
										ql("yyyy/MM/dd hh:mm:ss", t) : zl(t));
								s && u.push(s), f && (p[a] = v, ++g)
							}
						}
						o.length ? E(o, function(t) {
							e(Mh(m, a, t), t)
						}) : E(t, e);
						var i = l ? f ? "\n" : "<br/>" : "",
							n = i + u.join(i || ", ");
						return {
							renderMode: c,
							content: n,
							style: p
						}
					}(r) : i(n ? Mh(m, a, o[0]) : s ? r[0] : r)).content,
					u = d.seriesIndex + "at" + g,
					y = Yl({
						color: v,
						type: "item",
						renderMode: c,
						markerId: u
					});
				p[u] = v, ++g;
				var x = m.getName(a),
					_ = this.name;
				Ta(this) || (_ = ""), _ = _ ? Wl(_) + (h ? ": " : e) : "";
				var w = "string" == typeof y ? y : y.content;
				return {
					html: h ? w + _ + l : _ + w + (x ? Wl(x) + ": " + l : l),
					markers: p
				}
			},
			isAnimationEnabled: function() {
				if (v.node) return !1;
				var t = this.getShallow("animation");
				return t && this.getData().count() > this.getShallow("animationThreshold") && (t = !1), t
			},
			restoreData: function() {
				this.dataTask.dirty()
			},
			getColorFromPalette: function(t, e, i) {
				var n = this.ecModel,
					a = yu.getColorFromPalette.call(this, t, e, i);
				return a = a || n.getColorFromPalette(t, e, i)
			},
			coordDimToDataDim: function(t) {
				return this.getRawData().mapDimension(t, !0)
			},
			getProgressive: function() {
				return this.get("progressive")
			},
			getProgressiveThreshold: function() {
				return this.get("progressiveThreshold")
			},
			getAxisTooltipData: null,
			getTooltipPosition: null,
			pipeTask: null,
			preventIncremental: null,
			pipelineContext: null
		});

	function Hh(t) {
		var e = t.name;
		Ta(t) || (t.name = function(t) {
			var i = t.getRawData(),
				e = i.mapDimension("seriesName", !0),
				n = [];
			return E(e, function(t) {
				var e = i.getDimensionInfo(t);
				e.displayName && n.push(e.displayName)
			}), n.join(" ")
		}(t) || e)
	}

	function Zh(t) {
		return t.model.getRawData().count()
	}

	function Uh(t) {
		var e = t.model;
		return e.setData(e.getRawData().cloneShallow()), Xh
	}

	function Xh(t, e) {
		t.end > e.outputData.count() && e.model.getRawData().cloneShallow(e.outputData)
	}

	function Yh(e, i) {
		E(e.CHANGABLE_METHODS, function(t) {
			e.wrapMethod(t, A(jh, i))
		})
	}

	function jh(t) {
		var e = qh(t);
		e && e.setOutputEnd(this.count())
	}

	function qh(t) {
		var e = (t.ecModel || {}).scheduler,
			i = e && e.getPipeline(t.uid);
		if (i) {
			var n = i.currentTask;
			if (n) {
				var a = n.agentStubMap;
				a && (n = a.get(t.uid))
			}
			return n
		}
	}
	b(Wh, Th), b(Wh, yu);
	var Kh = function() {
		this.group = new Si, this.uid = ml("viewComponent")
	};
	Kh.prototype = {
		constructor: Kh,
		init: function(t, e) {},
		render: function(t, e, i, n) {},
		dispose: function() {},
		filterForExposedEvent: null
	};
	var $h = Kh.prototype;
	$h.updateView = $h.updateLayout = $h.updateVisual = function(t, e, i, n) {}, Ga(Kh), Ua(Kh, {
		registerWhenExtend: !0
	});

	function Jh() {
		var s = La();
		return function(t) {
			var e = s(t),
				i = t.pipelineContext,
				n = e.large,
				a = e.progressiveRender,
				o = e.large = i.large,
				r = e.progressiveRender = i.progressiveRender;
			return !!(n ^ o || a ^ r) && "reset"
		}
	}
	var Qh = La(),
		tc = Jh();

	function ec() {
		this.group = new Si, this.uid = ml("viewChart"), this.renderTask = Dh({
			plan: oc,
			reset: rc
		}), this.renderTask.context = {
			view: this
		}
	}
	var ic = ec.prototype = {
		type: "chart",
		init: function(t, e) {},
		render: function(t, e, i, n) {},
		highlight: function(t, e, i, n) {
			ac(t.getData(), n, "emphasis")
		},
		downplay: function(t, e, i, n) {
			ac(t.getData(), n, "normal")
		},
		remove: function(t, e) {
			this.group.removeAll()
		},
		dispose: function() {},
		incrementalPrepareRender: null,
		incrementalRender: null,
		updateTransform: null,
		filterForExposedEvent: null
	};

	function nc(t, e, i) {
		if (t && (t.trigger(e, i), t.isGroup && !Rs(t)))
			for (var n = 0, a = t.childCount(); n < a; n++) nc(t.childAt(n), e, i)
	}

	function ac(e, t, i) {
		var n = Ca(e, t),
			a = t && null != t.highlightKey ? zs(t.highlightKey) : null;
		null != n ? E(wa(n), function(t) {
			nc(e.getItemGraphicEl(t), i, a)
		}) : e.eachItemGraphicEl(function(t) {
			nc(t, i, a)
		})
	}

	function oc(t) {
		return tc(t.model)
	}

	function rc(t) {
		var e = t.model,
			i = t.ecModel,
			n = t.api,
			a = t.payload,
			o = e.pipelineContext.progressiveRender,
			r = t.view,
			s = a && Qh(a).updateMethod,
			l = o ? "incrementalPrepareRender" : s && r[s] ? s : "render";
		return "render" !== l && r[l](e, i, n, a), sc[l]
	}
	ic.updateView = ic.updateLayout = ic.updateVisual = function(t, e, i, n) {
		this.render(t, e, i, n)
	}, Ga(ec), Ua(ec, {
		registerWhenExtend: !0
	}), ec.markUpdateMethod = function(t, e) {
		Qh(t).updateMethod = e
	};
	var sc = {
			incrementalPrepareRender: {
				progress: function(t, e) {
					e.view.incrementalRender(t, e.model, e.ecModel, e.api, e.payload)
				}
			},
			render: {
				forceFirstProgress: !0,
				progress: function(t, e) {
					e.view.render(e.model, e.ecModel, e.api, e.payload)
				}
			}
		},
		lc = "\0__throttleOriginMethod",
		uc = "\0__throttleRate",
		hc = "\0__throttleType";

	function cc(t, i, n) {
		var a, o, r, s, l, u = 0,
			h = 0,
			c = null;

		function d() {
			h = (new Date).getTime(), c = null, t.apply(r, s || [])
		}
		i = i || 0;

		function e() {
			a = (new Date).getTime(), r = this, s = arguments;
			var t = l || i,
				e = l || n;
			l = null, o = a - (e ? u : h) - t, clearTimeout(c), e ? c = setTimeout(d, t) : 0 <= o ? d() : c = setTimeout(d, -o),
				u = a
		}
		return e.clear = function() {
			c && (clearTimeout(c), c = null)
		}, e.debounceNextCall = function(t) {
			l = t
		}, e
	}

	function dc(t, e, i, n) {
		var a = t[e];
		if (a) {
			var o = a[lc] || a,
				r = a[hc];
			if (a[uc] !== i || r !== n) {
				if (null == i || !n) return t[e] = o;
				(a = t[e] = cc(o, i, "debounce" === n))[lc] = o, a[hc] = n, a[uc] = i
			}
			return a
		}
	}

	function fc(t, e) {
		var i = t[e];
		i && i[lc] && (t[e] = i[lc])
	}
	var pc = {
			createOnAllSeries: !0,
			performRawSeries: !0,
			reset: function(e, t) {
				var i = e.getData(),
					o = (e.visualColorAccessPath || "itemStyle.color").split("."),
					n = e.get(o) || e.getColorFromPalette(e.name, null, t.getSeriesCount());
				i.setVisual("color", n);
				var r = (e.visualBorderColorAccessPath || "itemStyle.borderColor").split("."),
					a = e.get(r);
				if (i.setVisual("borderColor", a), !t.isSeriesFiltered(e)) {
					"function" != typeof n || n instanceof jr || i.each(function(t) {
						i.setItemVisual(t, "color", n(e.getDataParams(t)))
					});
					return {
						dataEach: i.hasItemOption ? function(t, e) {
							var i = t.getItemModel(e),
								n = i.get(o, !0),
								a = i.get(r, !0);
							null != n && t.setItemVisual(e, "color", n), null != a && t.setItemVisual(e, "borderColor", a)
						} : null
					}
				}
			}
		},
		gc = {
			legend: {
				selector: {
					all: "全选",
					inverse: "反选"
				}
			},
			toolbox: {
				brush: {
					title: {
						rect: "矩形选择",
						polygon: "圈选",
						lineX: "横向选择",
						lineY: "纵向选择",
						keep: "保持选择",
						clear: "清除选择"
					}
				},
				dataView: {
					title: "数据视图",
					lang: ["数据视图", "关闭", "刷新"]
				},
				dataZoom: {
					title: {
						zoom: "区域缩放",
						back: "区域缩放还原"
					}
				},
				magicType: {
					title: {
						line: "切换为折线图",
						bar: "切换为柱状图",
						stack: "切换为堆叠",
						tiled: "切换为平铺"
					}
				},
				restore: {
					title: "还原"
				},
				saveAsImage: {
					title: "保存为图片",
					lang: ["右键另存为图片"]
				}
			},
			series: {
				typeNames: {
					pie: "饼图",
					bar: "柱状图",
					line: "折线图",
					scatter: "散点图",
					effectScatter: "涟漪散点图",
					radar: "雷达图",
					tree: "树图",
					treemap: "矩形树图",
					boxplot: "箱型图",
					candlestick: "K线图",
					k: "K线图",
					heatmap: "热力图",
					map: "地图",
					parallel: "平行坐标图",
					lines: "线图",
					graph: "关系图",
					sankey: "桑基图",
					funnel: "漏斗图",
					gauge: "仪表盘图",
					pictorialBar: "象形柱图",
					themeRiver: "主题河流图",
					sunburst: "旭日图"
				}
			},
			aria: {
				general: {
					withTitle: "这是一个关于“{title}”的图表。",
					withoutTitle: "这是一个图表，"
				},
				series: {
					single: {
						prefix: "",
						withName: "图表类型是{seriesType}，表示{seriesName}。",
						withoutName: "图表类型是{seriesType}。"
					},
					multiple: {
						prefix: "它由{seriesCount}个图表系列组成。",
						withName: "第{seriesId}个系列是一个表示{seriesName}的{seriesType}，",
						withoutName: "第{seriesId}个系列是一个{seriesType}，",
						separator: {
							middle: "；",
							end: "。"
						}
					}
				},
				data: {
					allData: "其数据是——",
					partialData: "其中，前{displayCnt}项是——",
					withName: "{name}的数据是{value}",
					withoutName: "{value}",
					separator: {
						middle: "，",
						end: ""
					}
				}
			}
		},
		mc = function(t, e) {
			var o = e.getModel("aria");
			if (o.get("show"))
				if (o.get("description")) t.setAttribute("aria-label", o.get("description"));
				else {
					var h = 0;
					e.eachSeries(function(t, e) {
						++h
					}, this);
					var i, c = o.get("data.maxCount") || 10,
						n = o.get("series.maxCount") || 10,
						d = Math.min(h, n);
					if (!(h < 1)) {
						var a = function() {
							var t = e.getModel("title").option;
							t && t.length && (t = t[0]);
							return t && t.text
						}();
						i = a ? p(g("general.withTitle"), {
							title: a
						}) : g("general.withoutTitle");
						var f = [];
						i += p(g(1 < h ? "series.multiple.prefix" : "series.single.prefix"), {
							seriesCount: h
						}), e.eachSeries(function(t, e) {
							if (e < d) {
								var i, n = t.get("name"),
									a = "series." + (1 < h ? "multiple" : "single") + ".";
								i = p(i = g(n ? a + "withName" : a + "withoutName"), {
									seriesId: t.seriesIndex,
									seriesName: t.get("name"),
									seriesType: function(t) {
										return gc.series.typeNames[t] || "自定义图"
									}(t.subType)
								});
								var o = t.getData();
								(window.data = o).count() > c ? i += p(g("data.partialData"), {
									displayCnt: c
								}) : i += g("data.allData");
								for (var r = [], s = 0; s < o.count(); s++)
									if (s < c) {
										var l = o.getName(s),
											u = Mh(o, s);
										r.push(p(g(l ? "data.withName" : "data.withoutName"), {
											name: l,
											value: u
										}))
									}
								i += r.join(g("data.separator.middle")) + g("data.separator.end"), f.push(i)
							}
						}), i += f.join(g("series.multiple.separator.middle")) + g("series.multiple.separator.end"), t.setAttribute(
							"aria-label", i)
					}
				}

			function p(t, e) {
				if ("string" != typeof t) return t;
				var i = t;
				return E(e, function(t, e) {
					i = i.replace(new RegExp("\\{\\s*" + e + "\\s*\\}", "g"), t)
				}), i
			}

			function g(t) {
				var e = o.get(t);
				if (null != e) return e;
				for (var i = t.split("."), n = gc.aria, a = 0; a < i.length; ++a) n = n[i[a]];
				return n
			}
		},
		vc = Math.PI;

	function yc(t, e, i, n) {
		this.ecInstance = t, this.api = e, this.unfinished;
		i = this._dataProcessorHandlers = i.slice(), n = this._visualHandlers = n.slice();
		this._allHandlers = i.concat(n), this._stageTaskMap = Q()
	}
	var xc = yc.prototype;

	function _c(l, t, u, h, c) {
		var d;

		function f(t, e) {
			return t.setDirty && (!t.dirtyMap || t.dirtyMap.get(e.__pipeline.id))
		}
		c = c || {}, E(t, function(n, t) {
			if (!c.visualType || c.visualType === n.visualType) {
				var e = l._stageTaskMap.get(n.uid),
					i = e.seriesTaskMap,
					a = e.overallTask;
				if (a) {
					var o, r = a.agentStubMap;
					r.each(function(t) {
						f(c, t) && (t.dirty(), o = !0)
					}), o && a.dirty(), wc(a, h);
					var s = l.getPerformArgs(a, c.block);
					r.each(function(t) {
						t.perform(s)
					}), d |= a.perform(s)
				} else i && i.each(function(t, e) {
					f(c, t) && t.dirty();
					var i = l.getPerformArgs(t, c.block);
					i.skip = !n.performRawSeries && u.isSeriesFiltered(t.context.model), wc(t, h), d |= t.perform(i)
				})
			}
		}), l.unfinished |= d
	}
	xc.restoreData = function(t, e) {
		t.restoreData(e), this._stageTaskMap.each(function(t) {
			var e = t.overallTask;
			e && e.dirty()
		})
	}, xc.getPerformArgs = function(t, e) {
		if (t.__pipeline) {
			var i = this._pipelineMap.get(t.__pipeline.id),
				n = i.context,
				a = !e && i.progressiveEnabled && (!n || n.progressiveRender) && t.__idxInPipeline > i.blockIndex ? i.step : null,
				o = n && n.modDataCount;
			return {
				step: a,
				modBy: null != o ? Math.ceil(o / a) : null,
				modDataCount: o
			}
		}
	}, xc.getPipeline = function(t) {
		return this._pipelineMap.get(t)
	}, xc.updateStreamModes = function(t, e) {
		var i = this._pipelineMap.get(t.uid),
			n = t.getData().count(),
			a = i.progressiveEnabled && e.incrementalPrepareRender && n >= i.threshold,
			o = t.get("large") && n >= t.get("largeThreshold"),
			r = "mod" === t.get("progressiveChunkMode") ? n : null;
		t.pipelineContext = i.context = {
			progressiveRender: a,
			modDataCount: r,
			large: o
		}
	}, xc.restorePipelines = function(t) {
		var n = this,
			a = n._pipelineMap = Q();
		t.eachSeries(function(t) {
			var e = t.getProgressive(),
				i = t.uid;
			a.set(i, {
				id: i,
				head: null,
				tail: null,
				threshold: t.getProgressiveThreshold(),
				progressiveEnabled: e && !(t.preventIncremental && t.preventIncremental()),
				blockIndex: -1,
				step: Math.round(e || 700),
				count: 0
			}), kc(n, t, t.dataTask)
		})
	}, xc.prepareStageTasks = function() {
		var i = this._stageTaskMap,
			n = this.ecInstance.getModel(),
			a = this.api;
		E(this._allHandlers, function(t) {
			var e = i.get(t.uid) || i.set(t.uid, []);
			t.reset && function(n, a, t, o, r) {
				var s = t.seriesTaskMap || (t.seriesTaskMap = Q()),
					e = a.seriesType,
					i = a.getTargetSeries;
				a.createOnAllSeries ? o.eachRawSeries(l) : e ? o.eachRawSeriesByType(e, l) : i && i(o, r).each(l);

				function l(t) {
					var e = t.uid,
						i = s.get(e) || s.set(e, Dh({
							plan: Ac,
							reset: Tc,
							count: Lc
						}));
					i.context = {
						model: t,
						ecModel: o,
						api: r,
						useClearVisual: a.isVisual && !a.isLayout,
						plan: a.plan,
						reset: a.reset,
						scheduler: n
					}, kc(n, t, i)
				}
				var u = n._pipelineMap;
				s.each(function(t, e) {
					u.get(e) || (t.dispose(), s.removeKey(e))
				})
			}(this, t, e, n, a), t.overallReset && function(n, t, e, i, a) {
				var o = e.overallTask = e.overallTask || Dh({
					reset: bc
				});
				o.context = {
					ecModel: i,
					api: a,
					overallReset: t.overallReset,
					scheduler: n
				};
				var r = o.agentStubMap = o.agentStubMap || Q(),
					s = t.seriesType,
					l = t.getTargetSeries,
					u = !0,
					h = t.modifyOutputEnd;
				s ? i.eachRawSeriesByType(s, c) : l ? l(i, a).each(c) : (u = !1, E(i.getSeries(), c));

				function c(t) {
					var e = t.uid,
						i = r.get(e);
					i || (i = r.set(e, Dh({
						reset: Sc,
						onDirty: Ic
					})), o.dirty()), i.context = {
						model: t,
						overallProgress: u,
						modifyOutputEnd: h
					}, i.agent = o, i.__block = u, kc(n, t, i)
				}
				var d = n._pipelineMap;
				r.each(function(t, e) {
					d.get(e) || (t.dispose(), o.dirty(), r.removeKey(e))
				})
			}(this, t, e, n, a)
		}, this)
	}, xc.prepareView = function(t, e, i, n) {
		var a = t.renderTask,
			o = a.context;
		o.model = e, o.ecModel = i, o.api = n, a.__block = !t.incrementalPrepareRender, kc(this, e, a)
	}, xc.performDataProcessorTasks = function(t, e) {
		_c(this, this._dataProcessorHandlers, t, e, {
			block: !0
		})
	}, xc.performVisualTasks = function(t, e, i) {
		_c(this, this._visualHandlers, t, e, i)
	}, xc.performSeriesTasks = function(t) {
		var e;
		t.eachSeries(function(t) {
			e |= t.dataTask.perform()
		}), this.unfinished |= e
	}, xc.plan = function() {
		this._pipelineMap.each(function(t) {
			var e = t.tail;
			do {
				if (e.__block) {
					t.blockIndex = e.__idxInPipeline;
					break
				}
				e = e.getUpstream()
			} while (e)
		})
	};
	var wc = xc.updatePayload = function(t, e) {
		"remain" !== e && (t.context.payload = e)
	};

	function bc(t) {
		t.overallReset(t.ecModel, t.api, t.payload)
	}

	function Sc(t, e) {
		return t.overallProgress && Mc
	}

	function Mc() {
		this.agent.dirty(), this.getDownstream().dirty()
	}

	function Ic() {
		this.agent && this.agent.dirty()
	}

	function Ac(t) {
		return t.plan && t.plan(t.model, t.ecModel, t.api, t.payload)
	}

	function Tc(t) {
		t.useClearVisual && t.data.clearAllVisual();
		var e = t.resetDefines = wa(t.reset(t.model, t.ecModel, t.api, t.payload));
		return 1 < e.length ? N(e, function(t, e) {
			return Cc(e)
		}) : Dc
	}
	var Dc = Cc(0);

	function Cc(o) {
		return function(t, e) {
			var i = e.data,
				n = e.resetDefines[o];
			if (n && n.dataEach)
				for (var a = t.start; a < t.end; a++) n.dataEach(i, a);
			else n && n.progress && n.progress(t, i)
		}
	}

	function Lc(t) {
		return t.data.count()
	}

	function kc(t, e, i) {
		var n = e.uid,
			a = t._pipelineMap.get(n);
		a.head || (a.head = i), a.tail && a.tail.pipe(i), (a.tail = i).__idxInPipeline = a.count++, i.__pipeline = a
	}
	yc.wrapStageHandler = function(t, e) {
		return O(t) && (t = {
			overallReset: t,
			seriesType: function(t) {
				Pc = null;
				try {
					t(Nc, Oc)
				} catch (t) {}
				return Pc
			}(t)
		}), t.uid = ml("stageHandler"), e && (t.visualType = e), t
	};
	var Pc, Nc = {},
		Oc = {};

	function Ec(t, e) {
		for (var i in e.prototype) t[i] = et
	}
	Ec(Nc, zu), Ec(Oc, Fu), Nc.eachSeriesByType = Nc.eachRawSeriesByType = function(t) {
		Pc = t
	}, Nc.eachComponent = function(t) {
		"series" === t.mainType && t.subType && (Pc = t.subType)
	};

	function Rc() {
		return {
			axisLine: {
				lineStyle: {
					color: Vc
				}
			},
			axisTick: {
				lineStyle: {
					color: Vc
				}
			},
			axisLabel: {
				textStyle: {
					color: Vc
				}
			},
			splitLine: {
				lineStyle: {
					type: "dashed",
					color: "#aaa"
				}
			},
			splitArea: {
				areaStyle: {
					color: Vc
				}
			}
		}
	}
	var zc = ["#37A2DA", "#32C5E9", "#67E0E3", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#E062AE", "#E690D1",
			"#e7bcf3", "#9d96f5", "#8378EA", "#96BFFF"
		],
		Bc = {
			color: zc,
			colorLayer: [
				["#37A2DA", "#ffd85c", "#fd7b5f"],
				["#37A2DA", "#67E0E3", "#FFDB5C", "#ff9f7f", "#E062AE", "#9d96f5"],
				["#37A2DA", "#32C5E9", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#e7bcf3", "#8378EA", "#96BFFF"], zc
			]
		},
		Vc = "#eee",
		Gc = ["#dd6b66", "#759aa0", "#e69d87", "#8dc1a9", "#ea7e53", "#eedd78", "#73a373", "#73b9bc", "#7289ab", "#91ca8c",
			"#f49f42"
		],
		Fc = {
			color: Gc,
			backgroundColor: "#333",
			tooltip: {
				axisPointer: {
					lineStyle: {
						color: Vc
					},
					crossStyle: {
						color: Vc
					}
				}
			},
			legend: {
				textStyle: {
					color: Vc
				}
			},
			textStyle: {
				color: Vc
			},
			title: {
				textStyle: {
					color: Vc
				}
			},
			toolbox: {
				iconStyle: {
					normal: {
						borderColor: Vc
					}
				}
			},
			dataZoom: {
				textStyle: {
					color: Vc
				}
			},
			visualMap: {
				textStyle: {
					color: Vc
				}
			},
			timeline: {
				lineStyle: {
					color: Vc
				},
				itemStyle: {
					normal: {
						color: Gc[1]
					}
				},
				label: {
					normal: {
						textStyle: {
							color: Vc
						}
					}
				},
				controlStyle: {
					normal: {
						color: Vc,
						borderColor: Vc
					}
				}
			},
			timeAxis: Rc(),
			logAxis: Rc(),
			valueAxis: Rc(),
			categoryAxis: Rc(),
			line: {
				symbol: "circle"
			},
			graph: {
				color: Gc
			},
			gauge: {
				title: {
					textStyle: {
						color: Vc
					}
				}
			},
			candlestick: {
				itemStyle: {
					normal: {
						color: "#FD1050",
						color0: "#0CF49B",
						borderColor: "#FD1050",
						borderColor0: "#0CF49B"
					}
				}
			}
		};
	Fc.categoryAxis.splitLine.show = !1, fu.extend({
		type: "dataset",
		defaultOption: {
			seriesLayoutBy: Du,
			sourceHeader: null,
			dimensions: null,
			source: null
		},
		optionUpdated: function() {
			! function(t) {
				var e = t.option.source,
					i = Au;
				if (V(e)) i = Tu;
				else if (k(e)) {
					0 === e.length && (i = Su);
					for (var n = 0, a = e.length; n < a; n++) {
						var o = e[n];
						if (null != o) {
							if (k(o)) {
								i = Su;
								break
							}
							if (z(o)) {
								i = Mu;
								break
							}
						}
					}
				} else if (z(e)) {
					for (var r in e)
						if (e.hasOwnProperty(r) && P(e[r])) {
							i = Iu;
							break
						}
				} else if (null != e) throw new Error("Invalid data");
				ku(t).sourceFormat = i
			}(this)
		}
	}), Kh.extend({
		type: "dataset"
	});
	var Wc = hr.extend({
			type: "ellipse",
			shape: {
				cx: 0,
				cy: 0,
				rx: 0,
				ry: 0
			},
			buildPath: function(t, e) {
				var i = e.cx,
					n = e.cy,
					a = e.rx,
					o = e.ry,
					r = .5522848 * a,
					s = .5522848 * o;
				t.moveTo(i - a, n), t.bezierCurveTo(i - a, n - s, i - r, n - o, i, n - o), t.bezierCurveTo(i + r, n - o, i + a,
					n - s, i + a, n), t.bezierCurveTo(i + a, n + s, i + r, n + o, i, n + o), t.bezierCurveTo(i - r, n + o, i - a,
					n + s, i - a, n), t.closePath()
			}
		}),
		Hc = /[\s,]+/;

	function Zc(t) {
		R(t) && (t = (new DOMParser).parseFromString(t, "text/xml"));
		for (9 === t.nodeType && (t = t.firstChild);
			"svg" !== t.nodeName.toLowerCase() || 1 !== t.nodeType;) t = t.nextSibling;
		return t
	}

	function Uc() {
		this._defs = {}, this._root = null, this._isDefine = !1, this._isText = !1
	}
	Uc.prototype.parse = function(t, e) {
		e = e || {};
		var i = Zc(t);
		if (!i) throw new Error("Illegal svg");
		var n = new Si;
		this._root = n;
		var a = i.getAttribute("viewBox") || "",
			o = parseFloat(i.getAttribute("width") || e.width),
			r = parseFloat(i.getAttribute("height") || e.height);
		isNaN(o) && (o = null), isNaN(r) && (r = null), $c(i, n, null, !0);
		for (var s, l, u = i.firstChild; u;) this._parseNode(u, n), u = u.nextSibling;
		if (a) {
			var h = j(a).split(Hc);
			4 <= h.length && (s = {
				x: parseFloat(h[0] || 0),
				y: parseFloat(h[1] || 0),
				width: parseFloat(h[2]),
				height: parseFloat(h[3])
			})
		}
		if (s && null != o && null != r && (l = id(s, o, r), !e.ignoreViewBox)) {
			var c = n;
			(n = new Si).add(c), c.scale = l.scale.slice(), c.position = l.position.slice()
		}
		return e.ignoreRootClip || null == o || null == r || n.setClipPath(new Hr({
			shape: {
				x: 0,
				y: 0,
				width: o,
				height: r
			}
		})), {
			root: n,
			width: o,
			height: r,
			viewBoxRect: s,
			viewBoxTransform: l
		}
	}, Uc.prototype._parseNode = function(t, e) {
		var i, n, a = t.nodeName.toLowerCase();
		if ("defs" === a ? this._isDefine = !0 : "text" === a && (this._isText = !0), this._isDefine) {
			if (n = Yc[a]) {
				var o = n.call(this, t),
					r = t.getAttribute("id");
				r && (this._defs[r] = o)
			}
		} else(n = Xc[a]) && (i = n.call(this, t, e), e.add(i));
		for (var s = t.firstChild; s;) 1 === s.nodeType && this._parseNode(s, i), 3 === s.nodeType && this._isText && this._parseText(
			s, i), s = s.nextSibling;
		"defs" === a ? this._isDefine = !1 : "text" === a && (this._isText = !1)
	}, Uc.prototype._parseText = function(t, e) {
		if (1 === t.nodeType) {
			var i = t.getAttribute("dx") || 0,
				n = t.getAttribute("dy") || 0;
			this._textX += parseFloat(i), this._textY += parseFloat(n)
		}
		var a = new Dr({
			style: {
				text: t.textContent,
				transformText: !0
			},
			position: [this._textX || 0, this._textY || 0]
		});
		jc(e, a), $c(t, a, this._defs);
		var o = a.style.fontSize;
		o && o < 9 && (a.style.fontSize = 9, a.scale = a.scale || [1, 1], a.scale[0] *= o / 9, a.scale[1] *= o / 9);
		var r = a.getBoundingRect();
		return this._textX += r.width, e.add(a), a
	};
	var Xc = {
			g: function(t, e) {
				var i = new Si;
				return jc(e, i), $c(t, i, this._defs), i
			},
			rect: function(t, e) {
				var i = new Hr;
				return jc(e, i), $c(t, i, this._defs), i.setShape({
					x: parseFloat(t.getAttribute("x") || 0),
					y: parseFloat(t.getAttribute("y") || 0),
					width: parseFloat(t.getAttribute("width") || 0),
					height: parseFloat(t.getAttribute("height") || 0)
				}), i
			},
			circle: function(t, e) {
				var i = new Lr;
				return jc(e, i), $c(t, i, this._defs), i.setShape({
					cx: parseFloat(t.getAttribute("cx") || 0),
					cy: parseFloat(t.getAttribute("cy") || 0),
					r: parseFloat(t.getAttribute("r") || 0)
				}), i
			},
			line: function(t, e) {
				var i = new Ur;
				return jc(e, i), $c(t, i, this._defs), i.setShape({
					x1: parseFloat(t.getAttribute("x1") || 0),
					y1: parseFloat(t.getAttribute("y1") || 0),
					x2: parseFloat(t.getAttribute("x2") || 0),
					y2: parseFloat(t.getAttribute("y2") || 0)
				}), i
			},
			ellipse: function(t, e) {
				var i = new Wc;
				return jc(e, i), $c(t, i, this._defs), i.setShape({
					cx: parseFloat(t.getAttribute("cx") || 0),
					cy: parseFloat(t.getAttribute("cy") || 0),
					rx: parseFloat(t.getAttribute("rx") || 0),
					ry: parseFloat(t.getAttribute("ry") || 0)
				}), i
			},
			polygon: function(t, e) {
				var i = t.getAttribute("points");
				i = i && qc(i);
				var n = new Rr({
					shape: {
						points: i || []
					}
				});
				return jc(e, n), $c(t, n, this._defs), n
			},
			polyline: function(t, e) {
				var i = new hr;
				jc(e, i), $c(t, i, this._defs);
				var n = t.getAttribute("points");
				return n = n && qc(n), new zr({
					shape: {
						points: n || []
					}
				})
			},
			image: function(t, e) {
				var i = new Yn;
				return jc(e, i), $c(t, i, this._defs), i.setStyle({
					image: t.getAttribute("xlink:href"),
					x: t.getAttribute("x"),
					y: t.getAttribute("y"),
					width: t.getAttribute("width"),
					height: t.getAttribute("height")
				}), i
			},
			text: function(t, e) {
				var i = t.getAttribute("x") || 0,
					n = t.getAttribute("y") || 0,
					a = t.getAttribute("dx") || 0,
					o = t.getAttribute("dy") || 0;
				this._textX = parseFloat(i) + parseFloat(a), this._textY = parseFloat(n) + parseFloat(o);
				var r = new Si;
				return jc(e, r), $c(t, r, this._defs), r
			},
			tspan: function(t, e) {
				var i = t.getAttribute("x"),
					n = t.getAttribute("y");
				null != i && (this._textX = parseFloat(i)), null != n && (this._textY = parseFloat(n));
				var a = t.getAttribute("dx") || 0,
					o = t.getAttribute("dy") || 0,
					r = new Si;
				return jc(e, r), $c(t, r, this._defs), this._textX += a, this._textY += o, r
			},
			path: function(t, e) {
				var i = Tr(t.getAttribute("d") || "");
				return jc(e, i), $c(t, i, this._defs), i
			}
		},
		Yc = {
			lineargradient: function(t) {
				var e = parseInt(t.getAttribute("x1") || 0, 10),
					i = parseInt(t.getAttribute("y1") || 0, 10),
					n = parseInt(t.getAttribute("x2") || 10, 10),
					a = parseInt(t.getAttribute("y2") || 0, 10),
					o = new Jr(e, i, n, a);
				return function(t, e) {
					var i = t.firstChild;
					for (; i;) {
						if (1 === i.nodeType) {
							var n = i.getAttribute("offset");
							n = 0 < n.indexOf("%") ? parseInt(n, 10) / 100 : n ? parseFloat(n) : 0;
							var a = i.getAttribute("stop-color") || "#000000";
							e.addColorStop(n, a)
						}
						i = i.nextSibling
					}
				}(t, o), o
			},
			radialgradient: function(t) {}
		};

	function jc(t, e) {
		t && t.__inheritedStyle && (e.__inheritedStyle || (e.__inheritedStyle = {}), C(e.__inheritedStyle, t.__inheritedStyle))
	}

	function qc(t) {
		for (var e = j(t).split(Hc), i = [], n = 0; n < e.length; n += 2) {
			var a = parseFloat(e[n]),
				o = parseFloat(e[n + 1]);
			i.push([a, o])
		}
		return i
	}
	var Kc = {
		fill: "fill",
		stroke: "stroke",
		"stroke-width": "lineWidth",
		opacity: "opacity",
		"fill-opacity": "fillOpacity",
		"stroke-opacity": "strokeOpacity",
		"stroke-dasharray": "lineDash",
		"stroke-dashoffset": "lineDashOffset",
		"stroke-linecap": "lineCap",
		"stroke-linejoin": "lineJoin",
		"stroke-miterlimit": "miterLimit",
		"font-family": "fontFamily",
		"font-size": "fontSize",
		"font-style": "fontStyle",
		"font-weight": "fontWeight",
		"text-align": "textAlign",
		"alignment-baseline": "textBaseline"
	};

	function $c(t, e, i, n) {
		var a = e.__inheritedStyle || {},
			o = "text" === e.type;
		if (1 === t.nodeType && (function(t, e) {
				var i = t.getAttribute("transform");
				if (i) {
					i = i.replace(/,/g, " ");
					var n = null,
						a = [];
					i.replace(td, function(t, e, i) {
						a.push(e, i)
					});
					for (var o = a.length - 1; 0 < o; o -= 2) {
						var r = a[o],
							s = a[o - 1];
						switch (n = n || Qt(), s) {
							case "translate":
								r = j(r).split(Hc), ne(n, n, [parseFloat(r[0]), parseFloat(r[1] || 0)]);
								break;
							case "scale":
								r = j(r).split(Hc), oe(n, n, [parseFloat(r[0]), parseFloat(r[1] || r[0])]);
								break;
							case "rotate":
								r = j(r).split(Hc), ae(n, n, parseFloat(r[0]));
								break;
							case "skew":
								r = j(r).split(Hc), console.warn("Skew transform is not supported yet");
								break;
							case "matrix":
								r = j(r).split(Hc);
								n[0] = parseFloat(r[0]), n[1] = parseFloat(r[1]), n[2] = parseFloat(r[2]), n[3] = parseFloat(r[3]), n[4] =
									parseFloat(r[4]), n[5] = parseFloat(r[5])
						}
					}
					e.setLocalTransform(n)
				}
			}(t, e), L(a, function(t) {
				var e = t.getAttribute("style"),
					i = {};
				if (!e) return i;
				var n, a = {};
				ed.lastIndex = 0;
				for (; null != (n = ed.exec(e));) a[n[1]] = n[2];
				for (var o in Kc) Kc.hasOwnProperty(o) && null != a[o] && (i[Kc[o]] = a[o]);
				return i
			}(t)), !n))
			for (var r in Kc)
				if (Kc.hasOwnProperty(r)) {
					var s = t.getAttribute(r);
					null != s && (a[Kc[r]] = s)
				}
		var l = o ? "textFill" : "fill",
			u = o ? "textStroke" : "stroke";
		e.style = e.style || new Vi;
		var h = e.style;
		null != a.fill && h.set(l, Qc(a.fill, i)), null != a.stroke && h.set(u, Qc(a.stroke, i)), E(["lineWidth", "opacity",
				"fillOpacity", "strokeOpacity", "miterLimit", "fontSize"
			], function(t) {
				var e = "lineWidth" === t && o ? "textStrokeWidth" : t;
				null != a[t] && h.set(e, parseFloat(a[t]))
			}), a.textBaseline && "auto" !== a.textBaseline || (a.textBaseline = "alphabetic"), "alphabetic" === a.textBaseline &&
			(a.textBaseline = "bottom"), "start" === a.textAlign && (a.textAlign = "left"), "end" === a.textAlign && (a.textAlign =
				"right"), E(["lineDashOffset", "lineCap", "lineJoin", "fontWeight", "fontFamily", "fontStyle", "textAlign",
				"textBaseline"
			], function(t) {
				null != a[t] && h.set(t, a[t])
			}), a.lineDash && (e.style.lineDash = j(a.lineDash).split(Hc)), h[u] && "none" !== h[u] && (e[u] = !0), e.__inheritedStyle =
			a
	}
	var Jc = /url\(\s*#(.*?)\)/;

	function Qc(t, e) {
		var i = e && t && t.match(Jc);
		return i ? e[j(i[1])] : t
	}
	var td = /(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.e,]*)\)/g;
	var ed = /([^\s:;]+)\s*:\s*([^:;]+)/g;

	function id(t, e, i) {
		var n = e / t.width,
			a = i / t.height,
			o = Math.min(n, a);
		return {
			scale: [o, o],
			position: [-(t.x + t.width / 2) * o + e / 2, -(t.y + t.height / 2) * o + i / 2]
		}
	}
	var nd = Q(),
		ad = {
			registerMap: function(t, e, i) {
				var n;
				return E(n = k(e) ? e : e.svg ? [{
					type: "svg",
					source: e.svg,
					specialAreas: e.specialAreas
				}] : (e.geoJson && !e.features && (i = e.specialAreas, e = e.geoJson), [{
					type: "geoJSON",
					source: e,
					specialAreas: i
				}]), function(t) {
					var e = t.type;
					"geoJson" === e && (e = t.type = "geoJSON"), (0, od[e])(t)
				}), nd.set(t, n)
			},
			retrieveMap: function(t) {
				return nd.get(t)
			}
		},
		od = {
			geoJSON: function(t) {
				var e = t.source;
				t.geoJSON = R(e) ? "undefined" != typeof JSON && JSON.parse ? JSON.parse(e) : new Function("return (" + e + ");")
					() : e
			},
			svg: function(t) {
				t.svgXML = Zc(t.source)
			}
		},
		rd = Y,
		sd = E,
		ld = O,
		ud = z,
		hd = fu.parseClassType,
		cd = {
			PROCESSOR: {
				FILTER: 1e3,
				SERIES_FILTER: 800,
				STATISTIC: 5e3
			},
			VISUAL: {
				LAYOUT: 1e3,
				PROGRESSIVE_LAYOUT: 1100,
				GLOBAL: 2e3,
				CHART: 3e3,
				POST_CHART_LAYOUT: 3500,
				COMPONENT: 4e3,
				BRUSH: 5e3
			}
		},
		dd = "__flagInMainProcess",
		fd = "__optionUpdated",
		pd = /^[a-zA-Z0-9_]+$/;

	function gd(n, a) {
		return function(t, e, i) {
			!a && this._disposed || (t = t && t.toLowerCase(), Ct.prototype[n].call(this, t, e, i))
		}
	}

	function md() {
		Ct.call(this)
	}

	function vd(t, e, i) {
		i = i || {}, "string" == typeof e && (e = Fd[e]), this.id, this.group, this._dom = t;
		var n = this._zr = fa(t, {
			renderer: i.renderer || "canvas",
			devicePixelRatio: i.devicePixelRatio,
			width: i.width,
			height: i.height
		});
		this._throttledZrFlush = cc(T(n.flush, n), 17), (e = D(e)) && ch(e, !0), this._theme = e, this._chartsViews = [],
			this._chartsMap = {}, this._componentsViews = [], this._componentsMap = {}, this._coordSysMgr = new Hu;
		var a = this._api = function(i) {
			var t = i._coordSysMgr;
			return L(new Fu(i), {
				getCoordinateSystems: T(t.getCoordinateSystems, t),
				getComponentByElement: function(t) {
					for (; t;) {
						var e = t.__ecComponentInfo;
						if (null != e) return i._model.getComponent(e.mainType, e.index);
						t = t.parent
					}
				}
			})
		}(this);

		function o(t, e) {
			return t.__prio - e.__prio
		}
		ki(Gd, o), ki(zd, o), this._scheduler = new yc(this, a, zd, Gd), Ct.call(this, this._ecEventProcessor = new Od),
			this._messageCenter = new md, this._initEvents(), this.resize = T(this.resize, this), this._pendingActions = [], n.animation
			.on("frame", this._onframe, this),
			function(t, e) {
				t.on("rendered", function() {
					e.trigger("rendered"), !t.animation.isFinished() || e[fd] || e._scheduler.unfinished || e._pendingActions.length ||
						e.trigger("finished")
				})
			}(n, this), K(this)
	}
	md.prototype.on = gd("on", !0), md.prototype.off = gd("off", !0), md.prototype.one = gd("one", !0), b(md, Ct);
	var yd = vd.prototype;

	function xd(t, e, i) {
		if (!this._disposed) {
			var n, a = this._model,
				o = this._coordSysMgr.getCoordinateSystems();
			e = Pa(a, e);
			for (var r = 0; r < o.length; r++) {
				var s = o[r];
				if (s[t] && null != (n = s[t](a, e, i))) return n
			}
		}
	}
	yd._onframe = function() {
			if (!this._disposed) {
				var t = this._scheduler;
				if (this[fd]) {
					var e = this[fd].silent;
					this[dd] = !0, wd(this), _d.update.call(this), this[dd] = !1, this[fd] = !1, Id.call(this, e), Ad.call(this, e)
				} else if (t.unfinished) {
					var i = 1,
						n = this._model,
						a = this._api;
					t.unfinished = !1;
					do {
						var o = +new Date;
						t.performSeriesTasks(n), t.performDataProcessorTasks(n), Sd(this, n), t.performVisualTasks(n), Ld(this, this._model,
							a, "remain"), i -= +new Date - o
					} while (0 < i && t.unfinished);
					t.unfinished || this._zr.flush()
				}
			}
		}, yd.getDom = function() {
			return this._dom
		}, yd.getZr = function() {
			return this._zr
		}, yd.setOption = function(t, e, i) {
			if (!this._disposed) {
				var n;
				if (ud(e) && (i = e.lazyUpdate, n = e.silent, e = e.notMerge), this[dd] = !0, !this._model || e) {
					var a = new qu(this._api),
						o = this._theme,
						r = this._model = new zu;
					r.scheduler = this._scheduler, r.init(null, null, o, a)
				}
				this._model.setOption(t, Bd), i ? (this[fd] = {
					silent: n
				}, this[dd] = !1) : (wd(this), _d.update.call(this), this._zr.flush(), this[fd] = !1, this[dd] = !1, Id.call(this,
					n), Ad.call(this, n))
			}
		}, yd.setTheme = function() {
			console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0")
		}, yd.getModel = function() {
			return this._model
		}, yd.getOption = function() {
			return this._model && this._model.getOption()
		}, yd.getWidth = function() {
			return this._zr.getWidth()
		}, yd.getHeight = function() {
			return this._zr.getHeight()
		}, yd.getDevicePixelRatio = function() {
			return this._zr.painter.dpr || window.devicePixelRatio || 1
		}, yd.getRenderedCanvas = function(t) {
			if (v.canvasSupported) return (t = t || {}).pixelRatio = t.pixelRatio || 1, t.backgroundColor = t.backgroundColor ||
				this._model.get("backgroundColor"), this._zr.painter.getRenderedCanvas(t)
		}, yd.getSvgDataUrl = function() {
			if (v.svgSupported) {
				var t = this._zr;
				return E(t.storage.getDisplayList(), function(t) {
					t.stopAnimation(!0)
				}), t.painter.pathToDataUrl()
			}
		}, yd.getDataURL = function(t) {
			if (!this._disposed) {
				var e = (t = t || {}).excludeComponents,
					i = this._model,
					n = [],
					a = this;
				sd(e, function(t) {
					i.eachComponent({
						mainType: t
					}, function(t) {
						var e = a._componentsMap[t.__viewId];
						e.group.ignore || (n.push(e), e.group.ignore = !0)
					})
				});
				var o = "svg" === this._zr.painter.getType() ? this.getSvgDataUrl() : this.getRenderedCanvas(t).toDataURL("image/" +
					(t && t.type || "png"));
				return sd(n, function(t) {
					t.group.ignore = !1
				}), o
			}
		}, yd.getConnectedDataURL = function(a) {
			if (!this._disposed && v.canvasSupported) {
				var o = this.group,
					r = Math.min,
					s = Math.max;
				if (Zd[o]) {
					var l = 1 / 0,
						u = 1 / 0,
						h = -1 / 0,
						c = -1 / 0,
						d = [],
						i = a && a.pixelRatio || 1;
					E(Hd, function(t, e) {
						if (t.group === o) {
							var i = t.getRenderedCanvas(D(a)),
								n = t.getDom().getBoundingClientRect();
							l = r(n.left, l), u = r(n.top, u), h = s(n.right, h), c = s(n.bottom, c), d.push({
								dom: i,
								left: n.left,
								top: n.top
							})
						}
					});
					var t = (h *= i) - (l *= i),
						e = (c *= i) - (u *= i),
						n = g();
					n.width = t, n.height = e;
					var f = fa(n);
					return a.connectedBackgroundColor && f.add(new Hr({
						shape: {
							x: 0,
							y: 0,
							width: t,
							height: e
						},
						style: {
							fill: a.connectedBackgroundColor
						}
					})), sd(d, function(t) {
						var e = new Yn({
							style: {
								x: t.left * i - l,
								y: t.top * i - u,
								image: t.dom
							}
						});
						f.add(e)
					}), f.refreshImmediately(), n.toDataURL("image/" + (a && a.type || "png"))
				}
				return this.getDataURL(a)
			}
		}, yd.convertToPixel = A(xd, "convertToPixel"), yd.convertFromPixel = A(xd, "convertFromPixel"), yd.containPixel =
		function(t, a) {
			var o;
			if (!this._disposed) return E(t = Pa(this._model, t), function(t, n) {
				0 <= n.indexOf("Models") && E(t, function(t) {
					var e = t.coordinateSystem;
					if (e && e.containPoint) o |= !!e.containPoint(a);
					else if ("seriesModels" === n) {
						var i = this._chartsMap[t.__viewId];
						i && i.containPoint && (o |= i.containPoint(a, t))
					}
				}, this)
			}, this), !!o
		}, yd.getVisual = function(t, e) {
			var i = (t = Pa(this._model, t, {
					defaultMainType: "series"
				})).seriesModel.getData(),
				n = t.hasOwnProperty("dataIndexInside") ? t.dataIndexInside : t.hasOwnProperty("dataIndex") ? i.indexOfRawIndex(t.dataIndex) :
				null;
			return null != n ? i.getItemVisual(n, e) : i.getVisual(e)
		}, yd.getViewOfComponentModel = function(t) {
			return this._componentsMap[t.__viewId]
		}, yd.getViewOfSeriesModel = function(t) {
			return this._chartsMap[t.__viewId]
		};
	var _d = {
		prepareAndUpdate: function(t) {
			wd(this), _d.update.call(this, t)
		},
		update: function(t) {
			var e = this._model,
				i = this._api,
				n = this._zr,
				a = this._coordSysMgr,
				o = this._scheduler;
			if (e) {
				o.restoreData(e, t), o.performSeriesTasks(e), a.create(e, i), o.performDataProcessorTasks(e, t), Sd(this, e), a.update(
					e, i), Dd(e), o.performVisualTasks(e, t), Cd(this, e, i, t);
				var r = e.get("backgroundColor") || "transparent";
				if (v.canvasSupported) n.setBackgroundColor(r);
				else {
					var s = Ee(r);
					r = Ue(s, "rgb"), 0 === s[3] && (r = "transparent")
				}
				kd(e, i)
			}
		},
		updateTransform: function(a) {
			var o = this._model,
				r = this,
				s = this._api;
			if (o) {
				var l = [];
				o.eachComponent(function(t, e) {
					var i = r.getViewOfComponentModel(e);
					if (i && i.__alive)
						if (i.updateTransform) {
							var n = i.updateTransform(e, o, s, a);
							n && n.update && l.push(i)
						} else l.push(i)
				});
				var n = Q();
				o.eachSeries(function(t) {
					var e = r._chartsMap[t.__viewId];
					if (e.updateTransform) {
						var i = e.updateTransform(t, o, s, a);
						i && i.update && n.set(t.uid, 1)
					} else n.set(t.uid, 1)
				}), Dd(o), this._scheduler.performVisualTasks(o, a, {
					setDirty: !0,
					dirtyMap: n
				}), Ld(r, o, s, a, n), kd(o, this._api)
			}
		},
		updateView: function(t) {
			var e = this._model;
			e && (ec.markUpdateMethod(t, "updateView"), Dd(e), this._scheduler.performVisualTasks(e, t, {
				setDirty: !0
			}), Cd(this, this._model, this._api, t), kd(e, this._api))
		},
		updateVisual: function(t) {
			_d.update.call(this, t)
		},
		updateLayout: function(t) {
			_d.update.call(this, t)
		}
	};

	function wd(t) {
		var e = t._model,
			i = t._scheduler;
		i.restorePipelines(e), i.prepareStageTasks(), Td(t, "component", e, i), Td(t, "chart", e, i), i.plan()
	}

	function bd(e, i, n, a, t) {
		var o = e._model;
		if (a) {
			var r = {};
			r[a + "Id"] = n[a + "Id"], r[a + "Index"] = n[a + "Index"], r[a + "Name"] = n[a + "Name"];
			var s = {
				mainType: a,
				query: r
			};
			t && (s.subType = t);
			var l = n.excludeSeriesId;
			null != l && (l = Q(wa(l))), o && o.eachComponent(s, function(t) {
				l && null != l.get(t.id) || u(e["series" === a ? "_chartsMap" : "_componentsMap"][t.__viewId])
			}, e)
		} else sd(e._componentsViews.concat(e._chartsViews), u);

		function u(t) {
			t && t.__alive && t[i] && t[i](t.__model, o, e._api, n)
		}
	}

	function Sd(t, e) {
		var i = t._chartsMap,
			n = t._scheduler;
		e.eachSeries(function(t) {
			n.updateStreamModes(t, i[t.__viewId])
		})
	}

	function Md(e, t) {
		var i = e.type,
			n = e.escapeConnect,
			a = Ed[i],
			o = a.actionInfo,
			r = (o.update || "update").split(":"),
			s = r.pop();
		r = null != r[0] && hd(r[0]), this[dd] = !0;
		var l = [e],
			u = !1;
		e.batch && (u = !0, l = N(e.batch, function(t) {
			return (t = C(L({}, t), e)).batch = null, t
		}));
		var h, c = [],
			d = "highlight" === i || "downplay" === i;
		sd(l, function(t) {
			(h = (h = a.action(t, this._model, this._api)) || L({}, t)).type = o.event || h.type, c.push(h), d ? bd(this, s,
				t, "series") : r && bd(this, s, t, r.main, r.sub)
		}, this), "none" === s || d || r || (this[fd] ? (wd(this), _d.update.call(this, e), this[fd] = !1) : _d[s].call(
			this, e)), h = u ? {
			type: o.event || i,
			escapeConnect: n,
			batch: c
		} : c[0], this[dd] = !1, t || this._messageCenter.trigger(h.type, h)
	}

	function Id(t) {
		for (var e = this._pendingActions; e.length;) {
			var i = e.shift();
			Md.call(this, i, t)
		}
	}

	function Ad(t) {
		t || this.trigger("updated")
	}

	function Td(t, e, a, o) {
		for (var r = "component" === e, s = r ? t._componentsViews : t._chartsViews, l = r ? t._componentsMap : t._chartsMap,
				u = t._zr, h = t._api, i = 0; i < s.length; i++) s[i].__alive = !1;

		function n(t) {
			var e = "_ec_" + t.id + "_" + t.type,
				i = l[e];
			if (!i) {
				var n = hd(t.type);
				(i = new(r ? Kh.getClass(n.main, n.sub) : ec.getClass(n.sub))).init(a, h), l[e] = i, s.push(i), u.add(i.group)
			}
			t.__viewId = i.__id = e, i.__alive = !0, i.__model = t, i.group.__ecComponentInfo = {
				mainType: t.mainType,
				index: t.componentIndex
			}, r || o.prepareView(i, t, a, h)
		}
		r ? a.eachComponent(function(t, e) {
			"series" !== t && n(e)
		}) : a.eachSeries(n);
		for (i = 0; i < s.length;) {
			var c = s[i];
			c.__alive ? i++ : (r || c.renderTask.dispose(), u.remove(c.group), c.dispose(a, h), s.splice(i, 1), delete l[c.__id],
				c.__id = c.group.__ecComponentInfo = null)
		}
	}

	function Dd(t) {
		t.clearColorPalette(), t.eachSeries(function(t) {
			t.clearColorPalette()
		})
	}

	function Cd(t, e, i, n) {
		! function(t, i, n, a, e) {
			sd(e || t._componentsViews, function(t) {
				var e = t.__model;
				t.render(e, i, n, a), Nd(e, t)
			})
		}(t, e, i, n), sd(t._chartsViews, function(t) {
			t.__alive = !1
		}), Ld(t, e, i, n), sd(t._chartsViews, function(t) {
			t.__alive || t.remove(e, i)
		})
	}

	function Ld(n, t, e, a, o) {
		var r, s = n._scheduler;
		t.eachSeries(function(t) {
				var e = n._chartsMap[t.__viewId];
				e.__alive = !0;
				var i = e.renderTask;
				s.updatePayload(i, a), o && o.get(t.uid) && i.dirty(), r |= i.perform(s.getPerformArgs(i)), e.group.silent = !!t.get(
						"silent"), Nd(t, e),
					function(t, e) {
						var i = t.get("blendMode") || null;
						e.group.traverse(function(t) {
							t.isGroup || t.style.blend !== i && t.setStyle("blend", i), t.eachPendingDisplayable && t.eachPendingDisplayable(
								function(t) {
									t.setStyle("blend", i)
								})
						})
					}(t, e)
			}), s.unfinished |= r,
			function(i, t) {
				var e = i._zr.storage,
					n = 0;
				e.traverse(function(t) {
					n++
				}), n > t.get("hoverLayerThreshold") && !v.node && t.eachSeries(function(t) {
					if (!t.preventUsingHoverLayer) {
						var e = i._chartsMap[t.__viewId];
						e.__alive && e.group.traverse(function(t) {
							t.useHoverLayer = !0
						})
					}
				})
			}(n, t), mc(n._zr.dom, t)
	}

	function kd(e, i) {
		sd(Vd, function(t) {
			t(e, i)
		})
	}
	yd.resize = function(t) {
		if (!this._disposed) {
			this._zr.resize(t);
			var e = this._model;
			if (this._loadingFX && this._loadingFX.resize(), e) {
				var i = e.resetOption("media"),
					n = t && t.silent;
				this[dd] = !0, i && wd(this), _d.update.call(this), this[dd] = !1, Id.call(this, n), Ad.call(this, n)
			}
		}
	}, yd.showLoading = function(t, e) {
		if (!this._disposed && (ud(t) && (e = t, t = ""), t = t || "default", this.hideLoading(), Wd[t])) {
			var i = Wd[t](this._api, e),
				n = this._zr;
			this._loadingFX = i, n.add(i)
		}
	}, yd.hideLoading = function() {
		this._disposed || (this._loadingFX && this._zr.remove(this._loadingFX), this._loadingFX = null)
	}, yd.makeActionFromEvent = function(t) {
		var e = L({}, t);
		return e.type = Rd[t.type], e
	}, yd.dispatchAction = function(t, e) {
		this._disposed || (ud(e) || (e = {
			silent: !!e
		}), Ed[t.type] && this._model && (this[dd] ? this._pendingActions.push(t) : (Md.call(this, t, e.silent), e.flush ?
			this._zr.flush(!0) : !1 !== e.flush && v.browser.weChat && this._throttledZrFlush(), Id.call(this, e.silent),
			Ad.call(this, e.silent))))
	}, yd.appendData = function(t) {
		if (!this._disposed) {
			var e = t.seriesIndex;
			this.getModel().getSeriesByIndex(e).appendData(t), this._scheduler.unfinished = !0
		}
	}, yd.on = gd("on", !1), yd.off = gd("off", !1), yd.one = gd("one", !1);
	var Pd = ["click", "dblclick", "mouseover", "mouseout", "mousemove", "mousedown", "mouseup", "globalout",
		"contextmenu"
	];

	function Nd(t, e) {
		var i = t.get("z"),
			n = t.get("zlevel");
		e.group.traverse(function(t) {
			"group" !== t.type && (null != i && (t.z = i), null != n && (t.zlevel = n))
		})
	}

	function Od() {
		this.eventInfo
	}
	yd._initEvents = function() {
		sd(Pd, function(u) {
			function t(t) {
				var e, i = this.getModel(),
					n = t.target;
				if ("globalout" === u) e = {};
				else if (n && null != n.dataIndex) {
					var a = n.dataModel || i.getSeriesByIndex(n.seriesIndex);
					e = a && a.getDataParams(n.dataIndex, n.dataType, n) || {}
				} else n && n.eventData && (e = L({}, n.eventData));
				if (e) {
					var o = e.componentType,
						r = e.componentIndex;
					"markLine" !== o && "markPoint" !== o && "markArea" !== o || (o = "series", r = e.seriesIndex);
					var s = o && null != r && i.getComponent(o, r),
						l = s && this["series" === s.mainType ? "_chartsMap" : "_componentsMap"][s.__viewId];
					e.event = t, e.type = u, this._ecEventProcessor.eventInfo = {
						targetEl: n,
						packedEvent: e,
						model: s,
						view: l
					}, this.trigger(u, e)
				}
			}
			t.zrEventfulCallAtLast = !0, this._zr.on(u, t, this)
		}, this), sd(Rd, function(t, e) {
			this._messageCenter.on(e, function(t) {
				this.trigger(e, t)
			}, this)
		}, this)
	}, yd.isDisposed = function() {
		return this._disposed
	}, yd.clear = function() {
		this._disposed || this.setOption({
			series: []
		}, !0)
	}, yd.dispose = function() {
		if (!this._disposed) {
			this._disposed = !0, Oa(this.getDom(), Yd, "");
			var e = this._api,
				i = this._model;
			sd(this._componentsViews, function(t) {
				t.dispose(i, e)
			}), sd(this._chartsViews, function(t) {
				t.dispose(i, e)
			}), this._zr.dispose(), delete Hd[this.id]
		}
	}, b(vd, Ct), Od.prototype = {
		constructor: Od,
		normalizeQuery: function(t) {
			var s = {},
				l = {},
				u = {};
			if (R(t)) {
				var e = hd(t);
				s.mainType = e.main || null, s.subType = e.sub || null
			} else {
				var h = ["Index", "Name", "Id"],
					c = {
						name: 1,
						dataIndex: 1,
						dataType: 1
					};
				E(t, function(t, e) {
					for (var i = !1, n = 0; n < h.length; n++) {
						var a = h[n],
							o = e.lastIndexOf(a);
						if (0 < o && o === e.length - a.length) {
							var r = e.slice(0, o);
							"data" !== r && (s.mainType = r, s[a.toLowerCase()] = t, i = !0)
						}
					}
					c.hasOwnProperty(e) && (l[e] = t, i = !0), i || (u[e] = t)
				})
			}
			return {
				cptQuery: s,
				dataQuery: l,
				otherQuery: u
			}
		},
		filter: function(t, e, i) {
			var n = this.eventInfo;
			if (!n) return !0;
			var a = n.targetEl,
				o = n.packedEvent,
				r = n.model,
				s = n.view;
			if (!r || !s) return !0;
			var l = e.cptQuery,
				u = e.dataQuery;
			return h(l, r, "mainType") && h(l, r, "subType") && h(l, r, "index", "componentIndex") && h(l, r, "name") && h(l,
				r, "id") && h(u, o, "name") && h(u, o, "dataIndex") && h(u, o, "dataType") && (!s.filterForExposedEvent || s.filterForExposedEvent(
				t, e.otherQuery, a, o));

			function h(t, e, i, n) {
				return null == t[i] || e[n || i] === t[i]
			}
		},
		afterTrigger: function() {
			this.eventInfo = null
		}
	};
	var Ed = {},
		Rd = {},
		zd = [],
		Bd = [],
		Vd = [],
		Gd = [],
		Fd = {},
		Wd = {},
		Hd = {},
		Zd = {},
		Ud = new Date - 0,
		Xd = new Date - 0,
		Yd = "_echarts_instance_";

	function jd(t) {
		Zd[t] = !1
	}
	var qd = jd;

	function Kd(t) {
		return Hd[function(t, e) {
			return t.getAttribute ? t.getAttribute(e) : t[e]
		}(t, Yd)]
	}

	function $d(t, e) {
		Fd[t] = e
	}

	function Jd(t) {
		Bd.push(t)
	}

	function Qd(t, e) { of (zd, t, e, 1e3)
	}

	function tf(t, e, i) {
		"function" == typeof e && (i = e, e = "");
		var n = ud(t) ? t.type : [t, t = {
			event: e
		}][0];
		t.event = (t.event || n).toLowerCase(), e = t.event, rd(pd.test(n) && pd.test(e)), Ed[n] || (Ed[n] = {
			action: i,
			actionInfo: t
		}), Rd[e] = n
	}

	function ef(t, e) {
		Hu.register(t, e)
	}

	function nf(t, e) { of (Gd, t, e, 1e3, "layout")
	}

	function af(t, e) { of (Gd, t, e, 3e3, "visual")
	}

	function of (t, e, i, n, a) {
		(ld(e) || ud(e)) && (i = e, e = n);
		var o = yc.wrapStageHandler(i, a);
		return o.__prio = e, o.__raw = i, t.push(o), o
	}

	function rf(t, e) {
		Wd[t] = e
	}

	function sf(t) {
		return fu.extend(t)
	}

	function lf(t) {
		return Kh.extend(t)
	}

	function uf(t) {
		return Wh.extend(t)
	}

	function hf(t) {
		return ec.extend(t)
	}
	af(2e3, pc), Jd(ch), Qd(900, function(t) {
		var o = Q();
		t.eachSeries(function(t) {
			var e = t.get("stack");
			if (e) {
				var i = o.get(e) || o.set(e, []),
					n = t.getData(),
					a = {
						stackResultDimension: n.getCalculationInfo("stackResultDimension"),
						stackedOverDimension: n.getCalculationInfo("stackedOverDimension"),
						stackedDimension: n.getCalculationInfo("stackedDimension"),
						stackedByDimension: n.getCalculationInfo("stackedByDimension"),
						isStackedByIndex: n.getCalculationInfo("isStackedByIndex"),
						data: n,
						seriesModel: t
					};
				if (!a.stackedDimension || !a.isStackedByIndex && !a.stackedByDimension) return;
				i.length && n.setCalculationInfo("stackedOnSeries", i[i.length - 1].seriesModel), i.push(a)
			}
		}), o.each(dh)
	}), rf("default", function(n, t) {
		C(t = t || {}, {
			text: "loading",
			color: "#009688",
			textColor: "#000",
			maskColor: "rgba(255, 255, 255, 0.8)",
			zlevel: 0
		});
		var a = new Hr({
				style: {
					fill: t.maskColor
				},
				zlevel: t.zlevel,
				z: 1e4
			}),
			o = new Kr({
				shape: {
					startAngle: -vc / 2,
					endAngle: -vc / 2 + .1,
					r: 10
				},
				style: {
					stroke: t.color,
					lineCap: "round",
					lineWidth: 5
				},
				zlevel: t.zlevel,
				z: 10001
			}),
			r = new Hr({
				style: {
					fill: "none",
					text: t.text,
					textPosition: "right",
					textDistance: 10,
					textFill: t.textColor
				},
				zlevel: t.zlevel,
				z: 10001
			});
		o.animateShape(!0).when(1e3, {
			endAngle: 3 * vc / 2
		}).start("circularInOut"), o.animateShape(!0).when(1e3, {
			startAngle: 3 * vc / 2
		}).delay(300).start("circularInOut");
		var e = new Si;
		return e.add(o), e.add(r), e.add(a), e.resize = function() {
			var t = n.getWidth() / 2,
				e = n.getHeight() / 2;
			o.setShape({
				cx: t,
				cy: e
			});
			var i = o.shape.r;
			r.setShape({
				x: t - i,
				y: e - i,
				width: 2 * i,
				height: 2 * i
			}), a.setShape({
				x: 0,
				y: 0,
				width: n.getWidth(),
				height: n.getHeight()
			})
		}, e.resize(), e
	}), tf({
		type: "highlight",
		event: "highlight",
		update: "highlight"
	}, et), tf({
		type: "downplay",
		event: "downplay",
		update: "downplay"
	}, et), $d("light", Bc), $d("dark", Fc);

	function cf(t) {
		return t
	}

	function df(t, e, i, n, a) {
		this._old = t, this._new = e, this._oldKeyGetter = i || cf, this._newKeyGetter = n || cf, this.context = a
	}

	function ff(t, e, i, n, a) {
		for (var o = 0; o < t.length; o++) {
			var r = "_ec_" + a[n](t[o], o),
				s = e[r];
			null == s ? (i.push(r), e[r] = o) : (s.length || (e[r] = s = [s]), s.push(o))
		}
	}
	df.prototype = {
		constructor: df,
		add: function(t) {
			return this._add = t, this
		},
		update: function(t) {
			return this._update = t, this
		},
		remove: function(t) {
			return this._remove = t, this
		},
		execute: function() {
			var t = this._old,
				e = this._new,
				i = {},
				n = [],
				a = [];
			for (ff(t, {}, n, "_oldKeyGetter", this), ff(e, i, a, "_newKeyGetter", this), o = 0; o < t.length; o++) {
				if (null != (s = i[r = n[o]]))(u = s.length) ? (1 === u && (i[r] = null), s = s.shift()) : i[r] = null, this._update &&
					this._update(s, o);
				else this._remove && this._remove(o)
			}
			for (var o = 0; o < a.length; o++) {
				var r = a[o];
				if (i.hasOwnProperty(r)) {
					var s;
					if (null == (s = i[r])) continue;
					if (s.length)
						for (var l = 0, u = s.length; l < u; l++) this._add && this._add(s[l]);
					else this._add && this._add(s)
				}
			}
		}
	};
	var pf = Q(["tooltip", "label", "itemName", "itemId", "seriesName"]);

	function gf(t, e) {
		return t.hasOwnProperty(e) || (t[e] = []), t[e]
	}

	function mf(t) {
		return "category" === t ? "ordinal" : "time" === t ? "time" : "float"
	}
	var vf = z,
		yf = "undefined",
		xf = {
			float: typeof Float64Array == yf ? Array : Float64Array,
			int: typeof Int32Array == yf ? Array : Int32Array,
			ordinal: Array,
			number: Array,
			time: Array
		},
		_f = typeof Uint32Array == yf ? Array : Uint32Array,
		wf = typeof Int32Array == yf ? Array : Int32Array,
		bf = typeof Uint16Array == yf ? Array : Uint16Array;

	function Sf(t) {
		return 65535 < t._rawCount ? _f : bf
	}
	var Mf = ["hasItemOption", "_nameList", "_idList", "_invertedIndicesMap", "_rawData", "_chunkSize", "_chunkCount",
			"_dimValueGetter", "_count", "_rawCount", "_nameDimIdx", "_idDimIdx"
		],
		If = ["_extent", "_approximateExtent", "_rawExtent"];

	function Af(e, i) {
		E(Mf.concat(i.__wrappedMethods || []), function(t) {
			i.hasOwnProperty(t) && (e[t] = i[t])
		}), e.__wrappedMethods = i.__wrappedMethods, E(If, function(t) {
			e[t] = D(i[t])
		}), e._calculationInfo = L(i._calculationInfo)
	}
	var Tf = function(t, e) {
			t = t || ["x", "y"];
			for (var i = {}, n = [], a = {}, o = 0; o < t.length; o++) {
				var r = t[o];
				R(r) && (r = {
					name: r
				});
				var s = r.name;
				r.type = r.type || "float", r.coordDim || (r.coordDim = s, r.coordDimIndex = 0), r.otherDims = r.otherDims || {},
					n.push(s), (i[s] = r).index = o, r.createInvertedIndices && (a[s] = [])
			}
			this.dimensions = n, this._dimensionInfos = i, this.hostModel = e, this.dataType, this._indices = null, this._count =
				0, this._rawCount = 0, this._storage = {}, this._nameList = [], this._idList = [], this._optionModels = [], this._visual = {},
				this._layout = {}, this._itemVisuals = [], this.hasItemVisual = {}, this._itemLayouts = [], this._graphicEls = [],
				this._chunkSize = 1e5, this._chunkCount = 0, this._rawData, this._rawExtent = {}, this._extent = {}, this._approximateExtent = {},
				this._dimensionsSummary = function(n) {
					var t = {},
						o = t.encode = {},
						r = Q(),
						s = [],
						l = [],
						u = t.userOutput = {
							dimensionNames: n.dimensions.slice(),
							encode: {}
						};
					E(n.dimensions, function(t) {
						var a = n.getDimensionInfo(t),
							e = a.coordDim;
						if (e) {
							var i = a.coordDimIndex;
							gf(o, e)[i] = t, a.isExtraCoord || (r.set(e, 1), function(t) {
								return !("ordinal" === t || "time" === t)
							}(a.type) && (s[0] = t), gf(u.encode, e)[i] = a.index), a.defaultTooltip && l.push(t)
						}
						pf.each(function(t, e) {
							var i = gf(o, e),
								n = a.otherDims[e];
							null != n && !1 !== n && (i[n] = a.name)
						})
					});
					var a = [],
						h = {};
					r.each(function(t, e) {
						var i = o[e];
						h[e] = i[0], a = a.concat(i)
					}), t.dataDimsOnCoord = a, t.encodeFirstDimNotExtra = h;
					var e = o.label;
					e && e.length && (s = e.slice());
					var i = o.tooltip;
					return i && i.length ? l = i.slice() : l.length || (l = s.slice()), o.defaultedLabel = s, o.defaultedTooltip = l,
						t
				}(this), this._invertedIndicesMap = a, this._calculationInfo = {}, this.userOutput = this._dimensionsSummary.userOutput
		},
		Df = Tf.prototype;

	function Cf(t, e, i, n, a) {
		var o = xf[e.type],
			r = n - 1,
			s = e.name,
			l = t[s][r];
		if (l && l.length < i) {
			for (var u = new o(Math.min(a - r * i, i)), h = 0; h < l.length; h++) u[h] = l[h];
			t[s][r] = u
		}
		for (var c = n * i; c < a; c += i) t[s].push(new o(Math.min(a - c, i)))
	}

	function Lf(a) {
		var o = a._invertedIndicesMap;
		E(o, function(t, e) {
			var i = a._dimensionInfos[e].ordinalMeta;
			if (i) {
				t = o[e] = new wf(i.categories.length);
				for (var n = 0; n < t.length; n++) t[n] = -1;
				for (n = 0; n < a._count; n++) t[a.get(e, n)] = n
			}
		})
	}

	function kf(t, e, i) {
		var n;
		if (null != e) {
			var a = t._chunkSize,
				o = Math.floor(i / a),
				r = i % a,
				s = t.dimensions[e],
				l = t._storage[s][o];
			if (l) {
				n = l[r];
				var u = t._dimensionInfos[s].ordinalMeta;
				u && u.categories.length && (n = u.categories[n])
			}
		}
		return n
	}

	function Pf(t) {
		return t
	}

	function Nf(t) {
		return t < this._count && 0 <= t ? this._indices[t] : -1
	}

	function Of(t, e) {
		var i = t._idList[e];
		return null == i && (i = kf(t, t._idDimIdx, e)), null == i && (i = "e\0\0" + e), i
	}

	function Ef(t) {
		return k(t) || (t = [t]), t
	}

	function Rf(t, e) {
		var i = t.dimensions,
			n = new Tf(N(i, t.getDimensionInfo, t), t.hostModel);
		Af(n, t);
		for (var a = n._storage = {}, o = t._storage, r = 0; r < i.length; r++) {
			var s = i[r];
			o[s] && (0 <= _(e, s) ? (a[s] = zf(o[s]), n._rawExtent[s] = Bf(), n._extent[s] = null) : a[s] = o[s])
		}
		return n
	}

	function zf(t) {
		for (var e, i, n = new Array(t.length), a = 0; a < t.length; a++) n[a] = (e = t[a], i = void 0, (i = e.constructor) ===
			Array ? e.slice() : new i(e));
		return n
	}

	function Bf() {
		return [1 / 0, -1 / 0]
	}
	Df.type = "list", Df.hasItemOption = !0, Df.getDimension = function(t) {
		return "number" != typeof t && (isNaN(t) || this._dimensionInfos.hasOwnProperty(t)) || (t = this.dimensions[t]), t
	}, Df.getDimensionInfo = function(t) {
		return this._dimensionInfos[this.getDimension(t)]
	}, Df.getDimensionsOnCoord = function() {
		return this._dimensionsSummary.dataDimsOnCoord.slice()
	}, Df.mapDimension = function(t, e) {
		var i = this._dimensionsSummary;
		if (null == e) return i.encodeFirstDimNotExtra[t];
		var n = i.encode[t];
		return !0 === e ? (n || []).slice() : n && n[e]
	}, Df.initData = function(t, e, i) {
		(Lu.isInstance(t) || P(t)) && (t = new fh(t, this.dimensions.length)), this._rawData = t, this._storage = {}, this._indices =
			null, this._nameList = e || [], this._idList = [], this._nameRepeatCount = {}, i || (this.hasItemOption = !1),
			this.defaultDimValueGetter = wh[this._rawData.getSource().sourceFormat], this._dimValueGetter = i = i || this.defaultDimValueGetter,
			this._dimValueGetterArrayRows = wh.arrayRows, this._rawExtent = {}, this._initDataFromProvider(0, t.count()), t.pure &&
			(this.hasItemOption = !1)
	}, Df.getProvider = function() {
		return this._rawData
	}, Df.appendData = function(t) {
		var e = this._rawData,
			i = this.count();
		e.appendData(t);
		var n = e.count();
		e.persistent || (n += i), this._initDataFromProvider(i, n)
	}, Df.appendValues = function(t, e) {
		for (var i = this._chunkSize, n = this._storage, a = this.dimensions, o = a.length, r = this._rawExtent, s = this.count(),
				l = s + Math.max(t.length, e ? e.length : 0), u = this._chunkCount, h = 0; h < o; h++) {
			r[v = a[h]] || (r[v] = Bf()), n[v] || (n[v] = []), Cf(n, this._dimensionInfos[v], i, u, l), this._chunkCount = n[v]
				.length
		}
		for (var c = new Array(o), d = s; d < l; d++) {
			for (var f = d - s, p = Math.floor(d / i), g = d % i, m = 0; m < o; m++) {
				var v = a[m],
					y = this._dimValueGetterArrayRows(t[f] || c, v, f, m);
				n[v][p][g] = y;
				var x = r[v];
				y < x[0] && (x[0] = y), y > x[1] && (x[1] = y)
			}
			e && (this._nameList[d] = e[f])
		}
		this._rawCount = this._count = l, this._extent = {}, Lf(this)
	}, Df._initDataFromProvider = function(t, e) {
		if (!(e <= t)) {
			for (var i, n = this._chunkSize, a = this._rawData, o = this._storage, r = this.dimensions, s = r.length, l = this
					._dimensionInfos, u = this._nameList, h = this._idList, c = this._rawExtent, d = this._nameRepeatCount = {}, f =
					this._chunkCount, p = 0; p < s; p++) {
				c[w = r[p]] || (c[w] = Bf());
				var g = l[w];
				0 === g.otherDims.itemName && (i = this._nameDimIdx = p), 0 === g.otherDims.itemId && (this._idDimIdx = p), o[w] ||
					(o[w] = []), Cf(o, g, n, f, e), this._chunkCount = o[w].length
			}
			for (var m = new Array(s), v = t; v < e; v++) {
				m = a.getItem(v, m);
				for (var y = Math.floor(v / n), x = v % n, _ = 0; _ < s; _++) {
					var w, b = o[w = r[_]][y],
						S = this._dimValueGetter(m, w, v, _);
					b[x] = S;
					var M = c[w];
					S < M[0] && (M[0] = S), S > M[1] && (M[1] = S)
				}
				if (!a.pure) {
					var I = u[v];
					if (m && null == I)
						if (null != m.name) u[v] = I = m.name;
						else if (null != i) {
						var A = r[i],
							T = o[A][y];
						if (T) {
							I = T[x];
							var D = l[A].ordinalMeta;
							D && D.categories.length && (I = D.categories[I])
						}
					}
					var C = null == m ? null : m.id;
					null == C && null != I && (d[I] = d[I] || 0, 0 < d[C = I] && (C += "__ec__" + d[I]), d[I]++), null != C && (h[v] =
						C)
				}
			}!a.persistent && a.clean && a.clean(), this._rawCount = this._count = e, this._extent = {}, Lf(this)
		}
	}, Df.count = function() {
		return this._count
	}, Df.getIndices = function() {
		var t = this._indices;
		if (t) {
			var e = t.constructor,
				i = this._count;
			if (e === Array) {
				a = new e(i);
				for (var n = 0; n < i; n++) a[n] = t[n]
			} else a = new e(t.buffer, 0, i)
		} else {
			var a = new(e = Sf(this))(this.count());
			for (n = 0; n < a.length; n++) a[n] = n
		}
		return a
	}, Df.get = function(t, e) {
		if (!(0 <= e && e < this._count)) return NaN;
		var i = this._storage;
		if (!i[t]) return NaN;
		e = this.getRawIndex(e);
		var n = Math.floor(e / this._chunkSize),
			a = e % this._chunkSize;
		return i[t][n][a]
	}, Df.getByRawIndex = function(t, e) {
		if (!(0 <= e && e < this._rawCount)) return NaN;
		var i = this._storage[t];
		if (!i) return NaN;
		var n = Math.floor(e / this._chunkSize),
			a = e % this._chunkSize;
		return i[n][a]
	}, Df._getFast = function(t, e) {
		var i = Math.floor(e / this._chunkSize),
			n = e % this._chunkSize;
		return this._storage[t][i][n]
	}, Df.getValues = function(t, e) {
		var i = [];
		k(t) || (e = t, t = this.dimensions);
		for (var n = 0, a = t.length; n < a; n++) i.push(this.get(t[n], e));
		return i
	}, Df.hasValue = function(t) {
		for (var e = this._dimensionsSummary.dataDimsOnCoord, i = 0, n = e.length; i < n; i++)
			if (isNaN(this.get(e[i], t))) return !1;
		return !0
	}, Df.getDataExtent = function(t) {
		t = this.getDimension(t);
		var e = this._storage[t],
			i = Bf();
		if (!e) return i;
		var n, a = this.count();
		if (!this._indices) return this._rawExtent[t].slice();
		if (n = this._extent[t]) return n.slice();
		for (var o = (n = i)[0], r = n[1], s = 0; s < a; s++) {
			var l = this._getFast(t, this.getRawIndex(s));
			l < o && (o = l), r < l && (r = l)
		}
		return n = [o, r], this._extent[t] = n
	}, Df.getApproximateExtent = function(t) {
		return t = this.getDimension(t), this._approximateExtent[t] || this.getDataExtent(t)
	}, Df.setApproximateExtent = function(t, e) {
		e = this.getDimension(e), this._approximateExtent[e] = t.slice()
	}, Df.getCalculationInfo = function(t) {
		return this._calculationInfo[t]
	}, Df.setCalculationInfo = function(t, e) {
		vf(t) ? L(this._calculationInfo, t) : this._calculationInfo[t] = e
	}, Df.getSum = function(t) {
		var e = 0;
		if (this._storage[t])
			for (var i = 0, n = this.count(); i < n; i++) {
				var a = this.get(t, i);
				isNaN(a) || (e += a)
			}
		return e
	}, Df.getMedian = function(t) {
		var i = [];
		this.each(t, function(t, e) {
			isNaN(t) || i.push(t)
		});
		var e = [].concat(i).sort(function(t, e) {
				return t - e
			}),
			n = this.count();
		return 0 === n ? 0 : n % 2 == 1 ? e[(n - 1) / 2] : (e[n / 2] + e[n / 2 - 1]) / 2
	}, Df.rawIndexOf = function(t, e) {
		var i = (t && this._invertedIndicesMap[t])[e];
		return null == i || isNaN(i) ? -1 : i
	}, Df.indexOfName = function(t) {
		for (var e = 0, i = this.count(); e < i; e++)
			if (this.getName(e) === t) return e;
		return -1
	}, Df.indexOfRawIndex = function(t) {
		if (t >= this._rawCount || t < 0) return -1;
		if (!this._indices) return t;
		var e = this._indices,
			i = e[t];
		if (null != i && i < this._count && i === t) return t;
		for (var n = 0, a = this._count - 1; n <= a;) {
			var o = (n + a) / 2 | 0;
			if (e[o] < t) n = 1 + o;
			else {
				if (!(e[o] > t)) return o;
				a = o - 1
			}
		}
		return -1
	}, Df.indicesOfNearest = function(t, e, i) {
		var n = [];
		if (!this._storage[t]) return n;
		null == i && (i = 1 / 0);
		for (var a = Number.MAX_VALUE, o = -1, r = 0, s = this.count(); r < s; r++) {
			var l = e - this.get(t, r),
				u = Math.abs(l);
			l <= i && u <= a && ((u < a || 0 <= l && o < 0) && (a = u, o = l, n.length = 0), n.push(r))
		}
		return n
	}, Df.getRawIndex = Pf, Df.getRawDataItem = function(t) {
		if (this._rawData.persistent) return this._rawData.getItem(this.getRawIndex(t));
		for (var e = [], i = 0; i < this.dimensions.length; i++) {
			var n = this.dimensions[i];
			e.push(this.get(n, t))
		}
		return e
	}, Df.getName = function(t) {
		var e = this.getRawIndex(t);
		return this._nameList[e] || kf(this, this._nameDimIdx, e) || ""
	}, Df.getId = function(t) {
		return Of(this, this.getRawIndex(t))
	}, Df.each = function(t, e, i, n) {
		if (this._count) {
			"function" == typeof t && (n = i, i = e, e = t, t = []), i = i || n || this;
			for (var a = (t = N(Ef(t), this.getDimension, this)).length, o = 0; o < this.count(); o++) switch (a) {
				case 0:
					e.call(i, o);
					break;
				case 1:
					e.call(i, this.get(t[0], o), o);
					break;
				case 2:
					e.call(i, this.get(t[0], o), this.get(t[1], o), o);
					break;
				default:
					for (var r = 0, s = []; r < a; r++) s[r] = this.get(t[r], o);
					s[r] = o, e.apply(i, s)
			}
		}
	}, Df.filterSelf = function(t, e, i, n) {
		if (this._count) {
			"function" == typeof t && (n = i, i = e, e = t, t = []), i = i || n || this, t = N(Ef(t), this.getDimension, this);
			for (var a = this.count(), o = new(Sf(this))(a), r = [], s = t.length, l = 0, u = t[0], h = 0; h < a; h++) {
				var c, d = this.getRawIndex(h);
				if (0 === s) c = e.call(i, h);
				else if (1 === s) {
					var f = this._getFast(u, d);
					c = e.call(i, f, h)
				} else {
					for (var p = 0; p < s; p++) r[p] = this._getFast(u, d);
					r[p] = h, c = e.apply(i, r)
				}
				c && (o[l++] = d)
			}
			return l < a && (this._indices = o), this._count = l, this._extent = {}, this.getRawIndex = this._indices ? Nf :
				Pf, this
		}
	}, Df.selectRange = function(t) {
		if (this._count) {
			var e = [];
			for (var i in t) t.hasOwnProperty(i) && e.push(i);
			var n = e.length;
			if (n) {
				var a = this.count(),
					o = new(Sf(this))(a),
					r = 0,
					s = e[0],
					l = t[s][0],
					u = t[s][1],
					h = !1;
				if (!this._indices) {
					var c = 0;
					if (1 === n) {
						for (var d = this._storage[e[0]], f = 0; f < this._chunkCount; f++)
							for (var p = d[f], g = Math.min(this._count - f * this._chunkSize, this._chunkSize), m = 0; m < g; m++) {
								(l <= (w = p[m]) && w <= u || isNaN(w)) && (o[r++] = c), c++
							}
						h = !0
					} else if (2 === n) {
						d = this._storage[s];
						var v = this._storage[e[1]],
							y = t[e[1]][0],
							x = t[e[1]][1];
						for (f = 0; f < this._chunkCount; f++) {
							p = d[f];
							var _ = v[f];
							for (g = Math.min(this._count - f * this._chunkSize, this._chunkSize), m = 0; m < g; m++) {
								var w = p[m],
									b = _[m];
								(l <= w && w <= u || isNaN(w)) && (y <= b && b <= x || isNaN(b)) && (o[r++] = c), c++
							}
						}
						h = !0
					}
				}
				if (!h)
					if (1 === n)
						for (m = 0; m < a; m++) {
							var S = this.getRawIndex(m);
							(l <= (w = this._getFast(s, S)) && w <= u || isNaN(w)) && (o[r++] = S)
						} else
							for (m = 0; m < a; m++) {
								var M = !0;
								for (S = this.getRawIndex(m), f = 0; f < n; f++) {
									var I = e[f];
									((w = this._getFast(i, S)) < t[I][0] || w > t[I][1]) && (M = !1)
								}
								M && (o[r++] = this.getRawIndex(m))
							}
				return r < a && (this._indices = o), this._count = r, this._extent = {}, this.getRawIndex = this._indices ? Nf :
					Pf, this
			}
		}
	}, Df.mapArray = function(t, e, i, n) {
		"function" == typeof t && (n = i, i = e, e = t, t = []), i = i || n || this;
		var a = [];
		return this.each(t, function() {
			a.push(e && e.apply(this, arguments))
		}, i), a
	}, Df.map = function(t, e, i, n) {
		i = i || n || this;
		var a = Rf(this, t = N(Ef(t), this.getDimension, this));
		a._indices = this._indices, a.getRawIndex = a._indices ? Nf : Pf;
		for (var o = a._storage, r = [], s = this._chunkSize, l = t.length, u = this.count(), h = [], c = a._rawExtent, d =
				0; d < u; d++) {
			for (var f = 0; f < l; f++) h[f] = this.get(t[f], d);
			h[l] = d;
			var p = e && e.apply(i, h);
			if (null != p) {
				"object" != typeof p && (r[0] = p, p = r);
				for (var g = this.getRawIndex(d), m = Math.floor(g / s), v = g % s, y = 0; y < p.length; y++) {
					var x = t[y],
						_ = p[y],
						w = c[x],
						b = o[x];
					b && (b[m][v] = _), _ < w[0] && (w[0] = _), _ > w[1] && (w[1] = _)
				}
			}
		}
		return a
	}, Df.downSample = function(t, e, i, n) {
		for (var a = Rf(this, [t]), o = a._storage, r = [], s = Math.floor(1 / e), l = o[t], u = this.count(), h = this._chunkSize,
				c = a._rawExtent[t], d = new(Sf(this))(u), f = 0, p = 0; p < u; p += s) {
			u - p < s && (s = u - p, r.length = s);
			for (var g = 0; g < s; g++) {
				var m = this.getRawIndex(p + g),
					v = Math.floor(m / h),
					y = m % h;
				r[g] = l[v][y]
			}
			var x = i(r),
				_ = this.getRawIndex(Math.min(p + n(r, x) || 0, u - 1)),
				w = _ % h;
			(l[Math.floor(_ / h)][w] = x) < c[0] && (c[0] = x), x > c[1] && (c[1] = x), d[f++] = _
		}
		return a._count = f, a._indices = d, a.getRawIndex = Nf, a
	}, Df.getItemModel = function(t) {
		var e = this.hostModel;
		return new dl(this.getRawDataItem(t), e, e && e.ecModel)
	}, Df.diff = function(e) {
		var i = this;
		return new df(e ? e.getIndices() : [], this.getIndices(), function(t) {
			return Of(e, t)
		}, function(t) {
			return Of(i, t)
		})
	}, Df.getVisual = function(t) {
		var e = this._visual;
		return e && e[t]
	}, Df.setVisual = function(t, e) {
		if (vf(t))
			for (var i in t) t.hasOwnProperty(i) && this.setVisual(i, t[i]);
		else this._visual = this._visual || {}, this._visual[t] = e
	}, Df.setLayout = function(t, e) {
		if (vf(t))
			for (var i in t) t.hasOwnProperty(i) && this.setLayout(i, t[i]);
		else this._layout[t] = e
	}, Df.getLayout = function(t) {
		return this._layout[t]
	}, Df.getItemLayout = function(t) {
		return this._itemLayouts[t]
	}, Df.setItemLayout = function(t, e, i) {
		this._itemLayouts[t] = i ? L(this._itemLayouts[t] || {}, e) : e
	}, Df.clearItemLayouts = function() {
		this._itemLayouts.length = 0
	}, Df.getItemVisual = function(t, e, i) {
		var n = this._itemVisuals[t],
			a = n && n[e];
		return null != a || i ? a : this.getVisual(e)
	}, Df.setItemVisual = function(t, e, i) {
		var n = this._itemVisuals[t] || {},
			a = this.hasItemVisual;
		if (this._itemVisuals[t] = n, vf(e))
			for (var o in e) e.hasOwnProperty(o) && (n[o] = e[o], a[o] = !0);
		else n[e] = i, a[e] = !0
	}, Df.clearAllVisual = function() {
		this._visual = {}, this._itemVisuals = [], this.hasItemVisual = {}
	};

	function Vf(t) {
		t.seriesIndex = this.seriesIndex, t.dataIndex = this.dataIndex, t.dataType = this.dataType
	}

	function Gf(t, e, i) {
		Lu.isInstance(e) || (e = Lu.seriesDataToSource(e)), i = i || {}, t = (t || []).slice();
		for (var n = (i.dimsDef || []).slice(), l = Q(i.encodeDef), a = Q(), o = Q(), u = [], r = function(t, e, i, n) {
				var a = Math.max(t.dimensionsDetectCount || 1, e.length, i.length, n || 0);
				return E(e, function(t) {
					var e = t.dimsDef;
					e && (a = Math.max(a, e.length))
				}), a
			}(e, t, n, i.dimCount), s = 0; s < r; s++) {
			var h = n[s] = L({}, z(n[s]) ? n[s] : {
					name: n[s]
				}),
				c = h.name,
				d = u[s] = {
					otherDims: {}
				};
			null != c && null == a.get(c) && (d.name = d.displayName = c, a.set(c, s)), null != h.type && (d.type = h.type),
				null != h.displayName && (d.displayName = h.displayName)
		}
		l.each(function(t, i) {
			if (1 === (t = wa(t).slice()).length && !R(t[0]) && t[0] < 0) l.set(i, !1);
			else {
				var n = l.set(i, []);
				E(t, function(t, e) {
					R(t) && (t = a.get(t)), null != t && t < r && (n[e] = t, p(u[t], i, e))
				})
			}
		});
		var f = 0;

		function p(t, e, i) {
			null != pf.get(e) ? t.otherDims[e] = i : (t.coordDim = e, t.coordDimIndex = i, o.set(e, !0))
		}
		E(t, function(a, t) {
			var o, r, s;
			if (R(a)) o = a, a = {};
			else {
				o = a.name;
				var e = a.ordinalMeta;
				a.ordinalMeta = null, (a = D(a)).ordinalMeta = e, r = a.dimsDef, s = a.otherDims, a.name = a.coordDim = a.coordDimIndex =
					a.dimsDef = a.otherDims = null
			}
			if (!1 !== (i = l.get(o))) {
				var i;
				if (!(i = wa(i)).length)
					for (var n = 0; n < (r && r.length || 1); n++) {
						for (; f < u.length && null != u[f].coordDim;) f++;
						f < u.length && i.push(f++)
					}
				E(i, function(t, e) {
					var i = u[t];
					if (p(C(i, a), o, e), null == i.name && r) {
						var n = r[e];
						z(n) || (n = {
							name: n
						}), i.name = i.displayName = n.name, i.defaultTooltip = n.defaultTooltip
					}
					s && C(i.otherDims, s)
				})
			}
		});
		var g = i.generateCoord,
			m = i.generateCoordCount,
			v = null != m;
		m = g ? m || 1 : 0;
		for (var y, x, _ = g || "value", w = 0; w < r; w++) {
			null == (d = u[w] = u[w] || {}).coordDim && (d.coordDim = Ff(_, o, v), d.coordDimIndex = 0, (!g || m <= 0) && (d.isExtraCoord = !
				0), m--), null == d.name && (d.name = Ff(d.coordDim, a)), null == d.type && (y = e, x = w, d.name, Eu(y.data, y.sourceFormat,
				y.seriesLayoutBy, y.dimensionsDefine, y.startIndex, x)) && (d.type = "ordinal")
		}
		return u
	}

	function Ff(t, e, i) {
		if (i || null != e.get(t)) {
			for (var n = 0; null != e.get(t + n);) n++;
			t += n
		}
		return e.set(t, !0), t
	}
	Df.setItemGraphicEl = function(t, e) {
		var i = this.hostModel;
		e && (e.dataIndex = t, e.dataType = this.dataType, e.seriesIndex = i && i.seriesIndex, "group" === e.type && e.traverse(
			Vf, e)), this._graphicEls[t] = e
	}, Df.getItemGraphicEl = function(t) {
		return this._graphicEls[t]
	}, Df.eachItemGraphicEl = function(i, n) {
		E(this._graphicEls, function(t, e) {
			t && i && i.call(n, t, e)
		})
	}, Df.cloneShallow = function(t) {
		if (!t) {
			var e = N(this.dimensions, this.getDimensionInfo, this);
			t = new Tf(e, this.hostModel)
		}
		if (t._storage = this._storage, Af(t, this), this._indices) {
			var i = this._indices.constructor;
			t._indices = new i(this._indices)
		} else t._indices = null;
		return t.getRawIndex = t._indices ? Nf : Pf, t
	}, Df.wrapMethod = function(t, e) {
		var i = this[t];
		"function" == typeof i && (this.__wrappedMethods = this.__wrappedMethods || [], this.__wrappedMethods.push(t), this[
			t] = function() {
			var t = i.apply(this, arguments);
			return e.apply(this, [t].concat(U(arguments)))
		})
	}, Df.TRANSFERABLE_METHODS = ["cloneShallow", "downSample", "map"], Df.CHANGABLE_METHODS = ["filterSelf",
		"selectRange"
	];
	var Wf = function(t, e) {
		return Gf((e = e || {}).coordDimensions || [], t, {
			dimsDef: e.dimensionsDefine || t.dimensionsDefine,
			encodeDef: e.encodeDefine || t.encodeDefine,
			dimCount: e.dimensionsCount,
			generateCoord: e.generateCoord,
			generateCoordCount: e.generateCoordCount
		})
	};

	function Hf(t, i, e) {
		var n, a, o, r, s = (e = e || {}).byIndex,
			l = e.stackedCoordDimension,
			u = !(!t || !t.get("stack"));
		if (E(i, function(t, e) {
				R(t) && (i[e] = t = {
					name: t
				}), u && !t.isExtraCoord && (s || n || !t.ordinalMeta || (n = t), a || "ordinal" === t.type || "time" === t.type ||
					l && l !== t.coordDim || (a = t))
			}), !a || s || n || (s = !0), a) {
			o = "__\0ecstackresult", r = "__\0ecstackedover", n && (n.createInvertedIndices = !0);
			var h = a.coordDim,
				c = a.type,
				d = 0;
			E(i, function(t) {
				t.coordDim === h && d++
			}), i.push({
				name: o,
				coordDim: h,
				coordDimIndex: d,
				type: c,
				isExtraCoord: !0,
				isCalculationCoord: !0
			}), d++, i.push({
				name: r,
				coordDim: r,
				coordDimIndex: d,
				type: c,
				isExtraCoord: !0,
				isCalculationCoord: !0
			})
		}
		return {
			stackedDimension: a && a.name,
			stackedByDimension: n && n.name,
			isStackedByIndex: s,
			stackedOverDimension: r,
			stackResultDimension: o
		}
	}

	function Zf(t, e) {
		return !!e && e === t.getCalculationInfo("stackedDimension")
	}

	function Uf(t, e) {
		return Zf(t, e) ? t.getCalculationInfo("stackResultDimension") : e
	}

	function Xf(t, e, i) {
		i = i || {}, Lu.isInstance(t) || (t = Lu.seriesDataToSource(t));
		var n, a = e.get("coordinateSystem"),
			o = Hu.get(a),
			r = xu(e);
		r && (n = N(r.coordSysDims, function(t) {
			var e = {
					name: t
				},
				i = r.axisMap.get(t);
			if (i) {
				var n = i.get("type");
				e.type = mf(n)
			}
			return e
		})), n = n || (o && (o.getDimensionsInfo ? o.getDimensionsInfo() : o.dimensions.slice()) || ["x", "y"]);
		var s, l, u = Wf(t, {
			coordDimensions: n,
			generateCoord: i.generateCoord
		});
		r && E(u, function(t, e) {
			var i = t.coordDim,
				n = r.categoryAxisMap.get(i);
			n && (null == s && (s = e), t.ordinalMeta = n.getOrdinalMeta()), null != t.otherDims.itemName && (l = !0)
		}), l || null == s || (u[s].otherDims.itemName = 0);
		var h = Hf(e, u),
			c = new Tf(u, e);
		c.setCalculationInfo(h);
		var d = null != s && function(t) {
			if (t.sourceFormat === bu) {
				var e = function(t) {
					var e = 0;
					for (; e < t.length && null == t[e];) e++;
					return t[e]
				}(t.data || []);
				return null != e && !k(Ma(e))
			}
		}(t) ? function(t, e, i, n) {
			return n === s ? i : this.defaultDimValueGetter(t, e, i, n)
		} : null;
		return c.hasItemOption = !1, c.initData(t, null, d), c
	}

	function Yf(t) {
		this._setting = t || {}, this._extent = [1 / 0, -1 / 0], this._interval = 0, this.init && this.init.apply(this,
			arguments)
	}

	function jf(t) {
		this.categories = t.categories || [], this._needCollect = t.needCollect, this._deduplication = t.deduplication, this
			._map
	}
	Yf.prototype.parse = function(t) {
		return t
	}, Yf.prototype.getSetting = function(t) {
		return this._setting[t]
	}, Yf.prototype.contain = function(t) {
		var e = this._extent;
		return t >= e[0] && t <= e[1]
	}, Yf.prototype.normalize = function(t) {
		var e = this._extent;
		return e[1] === e[0] ? .5 : (t - e[0]) / (e[1] - e[0])
	}, Yf.prototype.scale = function(t) {
		var e = this._extent;
		return t * (e[1] - e[0]) + e[0]
	}, Yf.prototype.unionExtent = function(t) {
		var e = this._extent;
		t[0] < e[0] && (e[0] = t[0]), t[1] > e[1] && (e[1] = t[1])
	}, Yf.prototype.unionExtentFromData = function(t, e) {
		this.unionExtent(t.getApproximateExtent(e))
	}, Yf.prototype.getExtent = function() {
		return this._extent.slice()
	}, Yf.prototype.setExtent = function(t, e) {
		var i = this._extent;
		isNaN(t) || (i[0] = t), isNaN(e) || (i[1] = e)
	}, Yf.prototype.isBlank = function() {
		return this._isBlank
	}, Yf.prototype.setBlank = function(t) {
		this._isBlank = t
	}, Yf.prototype.getLabel = null, Ga(Yf), Ua(Yf, {
		registerWhenExtend: !0
	}), jf.createByAxisModel = function(t) {
		var e = t.option,
			i = e.data,
			n = i && N(i, $f);
		return new jf({
			categories: n,
			needCollect: !n,
			deduplication: !1 !== e.dedplication
		})
	};
	var qf = jf.prototype;

	function Kf(t) {
		return t._map || (t._map = Q(t.categories))
	}

	function $f(t) {
		return z(t) && null != t.value ? t.value : t + ""
	}
	qf.getOrdinal = function(t) {
		return Kf(this).get(t)
	}, qf.parseAndCollect = function(t) {
		var e, i = this._needCollect;
		if ("string" != typeof t && !i) return t;
		if (i && !this._deduplication) return e = this.categories.length, this.categories[e] = t, e;
		var n = Kf(this);
		return null == (e = n.get(t)) && (i ? (e = this.categories.length, this.categories[e] = t, n.set(t, e)) : e = NaN),
			e
	};
	var Jf = Yf.prototype,
		Qf = Yf.extend({
			type: "ordinal",
			init: function(t, e) {
				t && !k(t) || (t = new jf({
					categories: t
				})), this._ordinalMeta = t, this._extent = e || [0, t.categories.length - 1]
			},
			parse: function(t) {
				return "string" == typeof t ? this._ordinalMeta.getOrdinal(t) : Math.round(t)
			},
			contain: function(t) {
				return t = this.parse(t), Jf.contain.call(this, t) && null != this._ordinalMeta.categories[t]
			},
			normalize: function(t) {
				return Jf.normalize.call(this, this.parse(t))
			},
			scale: function(t) {
				return Math.round(Jf.scale.call(this, t))
			},
			getTicks: function() {
				for (var t = [], e = this._extent, i = e[0]; i <= e[1];) t.push(i), i++;
				return t
			},
			getLabel: function(t) {
				if (!this.isBlank()) return this._ordinalMeta.categories[t]
			},
			count: function() {
				return this._extent[1] - this._extent[0] + 1
			},
			unionExtentFromData: function(t, e) {
				this.unionExtent(t.getApproximateExtent(e))
			},
			getOrdinalMeta: function() {
				return this._ordinalMeta
			},
			niceTicks: et,
			niceExtent: et
		});
	Qf.create = function() {
		return new Qf
	};
	var tp = _l;

	function ep(t) {
		return Sl(t) + 2
	}

	function ip(t, e, i) {
		t[e] = Math.max(Math.min(t[e], i[1]), i[0])
	}

	function np(t, e) {
		isFinite(t[0]) || (t[0] = e[0]), isFinite(t[1]) || (t[1] = e[1]), ip(t, 0, e), ip(t, 1, e), t[0] > t[1] && (t[0] = t[
			1])
	}
	var ap = _l,
		op = Yf.extend({
			type: "interval",
			_interval: 0,
			_intervalPrecision: 2,
			setExtent: function(t, e) {
				var i = this._extent;
				isNaN(t) || (i[0] = parseFloat(t)), isNaN(e) || (i[1] = parseFloat(e))
			},
			unionExtent: function(t) {
				var e = this._extent;
				t[0] < e[0] && (e[0] = t[0]), t[1] > e[1] && (e[1] = t[1]), op.prototype.setExtent.call(this, e[0], e[1])
			},
			getInterval: function() {
				return this._interval
			},
			setInterval: function(t) {
				this._interval = t, this._niceExtent = this._extent.slice(), this._intervalPrecision = ep(t)
			},
			getTicks: function() {
				return function(t, e, i, n) {
					var a = [];
					if (!t) return a;
					e[0] < i[0] && a.push(e[0]);
					for (var o = i[0]; o <= i[1] && (a.push(o), (o = tp(o + t, n)) !== a[a.length - 1]);)
						if (1e4 < a.length) return [];
					return e[1] > (a.length ? a[a.length - 1] : i[1]) && a.push(e[1]), a
				}(this._interval, this._extent, this._niceExtent, this._intervalPrecision)
			},
			getLabel: function(t, e) {
				if (null == t) return "";
				var i = e && e.precision;
				return null == i ? i = Sl(t) || 0 : "auto" === i && (i = this._intervalPrecision), zl(t = ap(t, i, !0))
			},
			niceTicks: function(t, e, i) {
				t = t || 5;
				var n = this._extent,
					a = n[1] - n[0];
				if (isFinite(a)) {
					a < 0 && (a = -a, n.reverse());
					var o = function(t, e, i, n) {
						var a = {},
							o = t[1] - t[0],
							r = a.interval = Nl(o / e, !0);
						null != i && r < i && (r = a.interval = i), null != n && n < r && (r = a.interval = n);
						var s = a.intervalPrecision = ep(r);
						return np(a.niceTickExtent = [tp(Math.ceil(t[0] / r) * r, s), tp(Math.floor(t[1] / r) * r, s)], t), a
					}(n, t, e, i);
					this._intervalPrecision = o.intervalPrecision, this._interval = o.interval, this._niceExtent = o.niceTickExtent
				}
			},
			niceExtent: function(t) {
				var e = this._extent;
				if (e[0] === e[1])
					if (0 !== e[0]) {
						var i = e[0];
						t.fixMax || (e[1] += i / 2), e[0] -= i / 2
					} else e[1] = 1;
				var n = e[1] - e[0];
				isFinite(n) || (e[0] = 0, e[1] = 1), this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval);
				var a = this._interval;
				t.fixMin || (e[0] = ap(Math.floor(e[0] / a) * a)), t.fixMax || (e[1] = ap(Math.ceil(e[1] / a) * a))
			}
		});
	op.create = function() {
		return new op
	};
	var rp = "__ec_stack_",
		sp = "undefined" != typeof Float32Array ? Float32Array : Array;

	function lp(t) {
		return t.get("stack") || rp + t.seriesIndex
	}

	function up(t) {
		return t.dim + t.index
	}

	function hp(t, e) {
		var i = [];
		return e.eachSeriesByType(t, function(t) {
			mp(t) && !vp(t) && i.push(t)
		}), i
	}

	function cp(t) {
		var g = function(t) {
				var l = {};
				E(t, function(t) {
					var e = t.coordinateSystem.getBaseAxis();
					if ("time" === e.type || "value" === e.type)
						for (var i = t.getData(), n = e.dim + "_" + e.index, a = i.mapDimension(e.dim), o = 0, r = i.count(); o < r; ++
							o) {
							var s = i.get(a, o);
							l[n] ? l[n].push(s) : l[n] = [s]
						}
				});
				var e = [];
				for (var i in l)
					if (l.hasOwnProperty(i)) {
						var n = l[i];
						if (n) {
							n.sort(function(t, e) {
								return t - e
							});
							for (var a = null, o = 1; o < n.length; ++o) {
								var r = n[o] - n[o - 1];
								0 < r && (a = null === a ? r : Math.min(a, r))
							}
							e[i] = a
						}
					}
				return e
			}(t),
			m = [];
		return E(t, function(t) {
			var e, i = t.coordinateSystem.getBaseAxis(),
				n = i.getExtent();
			if ("category" === i.type) e = i.getBandWidth();
			else if ("value" === i.type || "time" === i.type) {
				var a = i.dim + "_" + i.index,
					o = g[a],
					r = Math.abs(n[1] - n[0]),
					s = i.scale.getExtent(),
					l = Math.abs(s[1] - s[0]);
				e = o ? r / l * o : r
			} else {
				var u = t.getData();
				e = Math.abs(n[1] - n[0]) / u.count()
			}
			var h = xl(t.get("barWidth"), e),
				c = xl(t.get("barMaxWidth"), e),
				d = xl(t.get("barMinWidth") || 1, e),
				f = t.get("barGap"),
				p = t.get("barCategoryGap");
			m.push({
				bandWidth: e,
				barWidth: h,
				barMaxWidth: c,
				barMinWidth: d,
				barGap: f,
				barCategoryGap: p,
				axisKey: up(i),
				stackId: lp(t)
			})
		}), dp(m)
	}

	function dp(t) {
		var d = {};
		E(t, function(t, e) {
			var i = t.axisKey,
				n = t.bandWidth,
				a = d[i] || {
					bandWidth: n,
					remainedWidth: n,
					autoWidthCount: 0,
					categoryGap: "20%",
					gap: "30%",
					stacks: {}
				},
				o = a.stacks;
			d[i] = a;
			var r = t.stackId;
			o[r] || a.autoWidthCount++, o[r] = o[r] || {
				width: 0,
				maxWidth: 0
			};
			var s = t.barWidth;
			s && !o[r].width && (o[r].width = s, s = Math.min(a.remainedWidth, s), a.remainedWidth -= s);
			var l = t.barMaxWidth;
			l && (o[r].maxWidth = l);
			var u = t.barMinWidth;
			u && (o[r].minWidth = u);
			var h = t.barGap;
			null != h && (a.gap = h);
			var c = t.barCategoryGap;
			null != c && (a.categoryGap = c)
		});
		var f = {};
		return E(d, function(t, i) {
			f[i] = {};
			var e = t.stacks,
				n = t.bandWidth,
				a = xl(t.categoryGap, n),
				o = xl(t.gap, 1),
				r = t.remainedWidth,
				s = t.autoWidthCount,
				l = (r - a) / (s + (s - 1) * o);
			l = Math.max(l, 0), E(e, function(t) {
				var e = t.maxWidth,
					i = t.minWidth;
				if (t.width) {
					n = t.width;
					e && (n = Math.min(n, e)), i && (n = Math.max(n, i)), t.width = n, r -= n, s--
				} else {
					var n = l;
					e && e < n && (n = Math.min(e, r)), i && n < i && (n = i), n !== l && (t.width = n, r -= n, s--)
				}
			}), l = (r - a) / (s + (s - 1) * o), l = Math.max(l, 0);
			var u, h = 0;
			E(e, function(t, e) {
				t.width || (t.width = l), h += (u = t).width * (1 + o)
			}), u && (h -= u.width * o);
			var c = -h / 2;
			E(e, function(t, e) {
				f[i][e] = f[i][e] || {
					bandWidth: n,
					offset: c,
					width: t.width
				}, c += t.width * (1 + o)
			})
		}), f
	}

	function fp(t, e, i) {
		if (t && e) {
			var n = t[up(e)];
			return null != n && null != i && (n = n[lp(i)]), n
		}
	}

	function pp(t, e) {
		var i = hp(t, e),
			A = cp(i),
			T = {};
		E(i, function(t) {
			var e = t.getData(),
				i = t.coordinateSystem,
				n = i.getBaseAxis(),
				a = lp(t),
				o = A[up(n)][a],
				r = o.offset,
				s = o.width,
				l = i.getOtherAxis(n),
				u = t.get("barMinHeight") || 0;
			T[a] = T[a] || [], e.setLayout({
				bandWidth: o.bandWidth,
				offset: r,
				size: s
			});
			for (var h = e.mapDimension(l.dim), c = e.mapDimension(n.dim), d = Zf(e, h), f = l.isHorizontal(), p = yp(n, l, d),
					g = 0, m = e.count(); g < m; g++) {
				var v = e.get(h, g),
					y = e.get(c, g);
				if (!isNaN(v) && !isNaN(y)) {
					var x, _, w, b, S, M = 0 <= v ? "p" : "n",
						I = p;
					if (d && (T[a][y] || (T[a][y] = {
							p: p,
							n: p
						}), I = T[a][y][M]), f) x = I, _ = (S = i.dataToPoint([v, y]))[1] + r, w = S[0] - p, b = s, Math.abs(w) < u &&
						(w = (w < 0 ? -1 : 1) * u), d && (T[a][y][M] += w);
					else x = (S = i.dataToPoint([y, v]))[0] + r, _ = I, w = s, b = S[1] - p, Math.abs(b) < u && (b = (b <= 0 ? -1 :
						1) * u), d && (T[a][y][M] += b);
					e.setItemLayout(g, {
						x: x,
						y: _,
						width: w,
						height: b
					})
				}
			}
		}, this)
	}
	var gp = {
		seriesType: "bar",
		plan: Jh(),
		reset: function(t) {
			if (mp(t) && vp(t)) {
				var e = t.getData(),
					h = t.coordinateSystem,
					c = h.getBaseAxis(),
					d = h.getOtherAxis(c),
					f = e.mapDimension(d.dim),
					p = e.mapDimension(c.dim),
					g = d.isHorizontal(),
					m = g ? 0 : 1,
					v = fp(cp([t]), c, t).width;
				return .5 < v || (v = .5), {
					progress: function(t, e) {
						var i, n = t.count,
							a = new sp(2 * n),
							o = new sp(n),
							r = [],
							s = [],
							l = 0,
							u = 0;
						for (; null != (i = t.next());) s[m] = e.get(f, i), s[1 - m] = e.get(p, i), r = h.dataToPoint(s, null, r), a[
							l++] = r[0], a[l++] = r[1], o[u++] = i;
						e.setLayout({
							largePoints: a,
							largeDataIndices: o,
							barWidth: v,
							valueAxisStart: yp(c, d, !1),
							valueAxisHorizontal: g
						})
					}
				}
			}
		}
	};

	function mp(t) {
		return t.coordinateSystem && "cartesian2d" === t.coordinateSystem.type
	}

	function vp(t) {
		return t.pipelineContext && t.pipelineContext.large
	}

	function yp(t, e) {
		return e.toGlobalCoord(e.dataToCoord("log" === e.type ? 1 : 0))
	}
	var xp = op.prototype,
		_p = Math.ceil,
		wp = Math.floor,
		bp = 36e5,
		Sp = 864e5,
		Mp = op.extend({
			type: "time",
			getLabel: function(t) {
				var e = this._stepLvl,
					i = new Date(t);
				return ql(e[0], i, this.getSetting("useUTC"))
			},
			niceExtent: function(t) {
				var e = this._extent;
				if (e[0] === e[1] && (e[0] -= Sp, e[1] += Sp), e[1] === -1 / 0 && e[0] === 1 / 0) {
					var i = new Date;
					e[1] = +new Date(i.getFullYear(), i.getMonth(), i.getDate()), e[0] = e[1] - Sp
				}
				this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval);
				var n = this._interval;
				t.fixMin || (e[0] = _l(wp(e[0] / n) * n)), t.fixMax || (e[1] = _l(_p(e[1] / n) * n))
			},
			niceTicks: function(t, e, i) {
				t = t || 10;
				var n = this._extent,
					a = n[1] - n[0],
					o = a / t;
				null != e && o < e && (o = e), null != i && i < o && (o = i);
				var r = Ip.length,
					s = function(t, e, i, n) {
						for (; i < n;) {
							var a = i + n >>> 1;
							t[a][1] < e ? i = 1 + a : n = a
						}
						return i
					}(Ip, o, 0, r),
					l = Ip[Math.min(s, r - 1)],
					u = l[1];
				"year" === l[0] && (u *= Nl(a / u / t, !0));
				var h = this.getSetting("useUTC") ? 0 : 60 * new Date(+n[0] || +n[1]).getTimezoneOffset() * 1e3,
					c = [Math.round(_p((n[0] - h) / u) * u + h), Math.round(wp((n[1] - h) / u) * u + h)];
				np(c, n), this._stepLvl = l, this._interval = u, this._niceExtent = c
			},
			parse: function(t) {
				return +Ll(t)
			}
		});
	E(["contain", "normalize"], function(e) {
		Mp.prototype[e] = function(t) {
			return xp[e].call(this, this.parse(t))
		}
	});
	var Ip = [
		["hh:mm:ss", 1e3],
		["hh:mm:ss", 5e3],
		["hh:mm:ss", 1e4],
		["hh:mm:ss", 15e3],
		["hh:mm:ss", 3e4],
		["hh:mm\nMM-dd", 6e4],
		["hh:mm\nMM-dd", 3e5],
		["hh:mm\nMM-dd", 6e5],
		["hh:mm\nMM-dd", 9e5],
		["hh:mm\nMM-dd", 18e5],
		["hh:mm\nMM-dd", bp],
		["hh:mm\nMM-dd", 72e5],
		["hh:mm\nMM-dd", 6 * bp],
		["hh:mm\nMM-dd", 432e5],
		["MM-dd\nyyyy", Sp],
		["MM-dd\nyyyy", 2 * Sp],
		["MM-dd\nyyyy", 3 * Sp],
		["MM-dd\nyyyy", 4 * Sp],
		["MM-dd\nyyyy", 5 * Sp],
		["MM-dd\nyyyy", 6 * Sp],
		["week", 7 * Sp],
		["MM-dd\nyyyy", 864e6],
		["week", 14 * Sp],
		["week", 21 * Sp],
		["month", 31 * Sp],
		["week", 42 * Sp],
		["month", 62 * Sp],
		["week", 70 * Sp],
		["quarter", 95 * Sp],
		["month", 31 * Sp * 4],
		["month", 13392e6],
		["half-year", 16416e6],
		["month", 31 * Sp * 8],
		["month", 26784e6],
		["year", 380 * Sp]
	];
	Mp.create = function(t) {
		return new Mp({
			useUTC: t.ecModel.get("useUTC")
		})
	};
	var Ap = Yf.prototype,
		Tp = op.prototype,
		Dp = Sl,
		Cp = _l,
		Lp = Math.floor,
		kp = Math.ceil,
		Pp = Math.pow,
		Np = Math.log,
		Op = Yf.extend({
			type: "log",
			base: 10,
			$constructor: function() {
				Yf.apply(this, arguments), this._originalScale = new op
			},
			getTicks: function() {
				var i = this._originalScale,
					n = this._extent,
					a = i.getExtent();
				return N(Tp.getTicks.call(this), function(t) {
					var e = _l(Pp(this.base, t));
					return e = t === n[0] && i.__fixMin ? Ep(e, a[0]) : e, e = t === n[1] && i.__fixMax ? Ep(e, a[1]) : e
				}, this)
			},
			getLabel: Tp.getLabel,
			scale: function(t) {
				return t = Ap.scale.call(this, t), Pp(this.base, t)
			},
			setExtent: function(t, e) {
				var i = this.base;
				t = Np(t) / Np(i), e = Np(e) / Np(i), Tp.setExtent.call(this, t, e)
			},
			getExtent: function() {
				var t = this.base,
					e = Ap.getExtent.call(this);
				e[0] = Pp(t, e[0]), e[1] = Pp(t, e[1]);
				var i = this._originalScale,
					n = i.getExtent();
				return i.__fixMin && (e[0] = Ep(e[0], n[0])), i.__fixMax && (e[1] = Ep(e[1], n[1])), e
			},
			unionExtent: function(t) {
				this._originalScale.unionExtent(t);
				var e = this.base;
				t[0] = Np(t[0]) / Np(e), t[1] = Np(t[1]) / Np(e), Ap.unionExtent.call(this, t)
			},
			unionExtentFromData: function(t, e) {
				this.unionExtent(t.getApproximateExtent(e))
			},
			niceTicks: function(t) {
				t = t || 10;
				var e = this._extent,
					i = e[1] - e[0];
				if (!(i == 1 / 0 || i <= 0)) {
					var n = kl(i);
					for (t / i * n <= .5 && (n *= 10); !isNaN(n) && Math.abs(n) < 1 && 0 < Math.abs(n);) n *= 10;
					var a = [_l(kp(e[0] / n) * n), _l(Lp(e[1] / n) * n)];
					this._interval = n, this._niceExtent = a
				}
			},
			niceExtent: function(t) {
				Tp.niceExtent.call(this, t);
				var e = this._originalScale;
				e.__fixMin = t.fixMin, e.__fixMax = t.fixMax
			}
		});

	function Ep(t, e) {
		return Cp(t, Dp(e))
	}

	function Rp(t, e) {
		var i, n, a, o = t.type,
			r = e.getMin(),
			s = e.getMax(),
			l = null != r,
			u = null != s,
			h = t.getExtent();
		"ordinal" === o ? i = e.getCategories().length : (k(n = e.get("boundaryGap")) || (n = [n || 0, n || 0]), "boolean" ==
				typeof n[0] && (n = [0, 0]), n[0] = xl(n[0], 1), n[1] = xl(n[1], 1), a = h[1] - h[0] || Math.abs(h[0])), null == r &&
			(r = "ordinal" === o ? i ? 0 : NaN : h[0] - n[0] * a), null == s && (s = "ordinal" === o ? i ? i - 1 : NaN : h[1] +
				n[1] * a), "dataMin" === r ? r = h[0] : "function" == typeof r && (r = r({
				min: h[0],
				max: h[1]
			})), "dataMax" === s ? s = h[1] : "function" == typeof s && (s = s({
				min: h[0],
				max: h[1]
			})), null != r && isFinite(r) || (r = NaN), null != s && isFinite(s) || (s = NaN), t.setBlank(F(r) || F(s) ||
				"ordinal" === o && !t.getOrdinalMeta().categories.length), e.getNeedCrossZero() && (0 < r && 0 < s && !l && (r = 0),
				r < 0 && s < 0 && !u && (s = 0));
		var c = e.ecModel;
		if (c && "time" === o) {
			var d, f = hp("bar", c);
			if (E(f, function(t) {
					d |= t.getBaseAxis() === e.axis
				}), d) {
				var p = cp(f),
					g = function(t, e, i, n) {
						var a = i.axis.getExtent(),
							o = a[1] - a[0],
							r = fp(n, i.axis);
						if (void 0 === r) return {
							min: t,
							max: e
						};
						var s = 1 / 0;
						E(r, function(t) {
							s = Math.min(t.offset, s)
						});
						var l = -1 / 0;
						E(r, function(t) {
							l = Math.max(t.offset + t.width, l)
						}), s = Math.abs(s), l = Math.abs(l);
						var u = s + l,
							h = e - t,
							c = h / (1 - (s + l) / o) - h;
						return {
							min: t -= s / u * c,
							max: e += l / u * c
						}
					}(r, s, e, p);
				r = g.min, s = g.max
			}
		}
		return [r, s]
	}

	function zp(t, e) {
		var i = Rp(t, e),
			n = null != e.getMin(),
			a = null != e.getMax(),
			o = e.get("splitNumber");
		"log" === t.type && (t.base = e.get("logBase"));
		var r = t.type;
		t.setExtent(i[0], i[1]), t.niceExtent({
			splitNumber: o,
			fixMin: n,
			fixMax: a,
			minInterval: "interval" === r || "time" === r ? e.get("minInterval") : null,
			maxInterval: "interval" === r || "time" === r ? e.get("maxInterval") : null
		});
		var s = e.get("interval");
		null != s && t.setInterval && t.setInterval(s)
	}

	function Bp(t, e) {
		if (e = e || t.get("type")) switch (e) {
			case "category":
				return new Qf(t.getOrdinalMeta ? t.getOrdinalMeta() : t.getCategories(), [1 / 0, -1 / 0]);
			case "value":
				return new op;
			default:
				return (Yf.getClass(e) || op).create(t)
		}
	}

	function Vp(i) {
		var e, n = i.getLabelModel().get("formatter"),
			a = "category" === i.type ? i.scale.getExtent()[0] : null;
		return "string" == typeof n ? (e = n, n = function(t) {
			return t = i.scale.getLabel(t), e.replace("{value}", null != t ? t : "")
		}) : "function" == typeof n ? function(t, e) {
			return null != a && (e = t - a), n(Gp(i, t), e)
		} : function(t) {
			return i.scale.getLabel(t)
		}
	}

	function Gp(t, e) {
		return "category" === t.type ? t.scale.getLabel(e) : e
	}

	function Fp(t) {
		var e = t.get("interval");
		return null == e ? "auto" : e
	}

	function Wp(t) {
		return "category" === t.type && 0 === Fp(t.getLabelModel())
	}
	E(["contain", "normalize"], function(e) {
		Op.prototype[e] = function(t) {
			return t = Np(t) / Np(this.base), Ap[e].call(this, t)
		}
	}), Op.create = function() {
		return new Op
	};
	var Hp = {
			getMin: function(t) {
				var e = this.option,
					i = t || null == e.rangeStart ? e.min : e.rangeStart;
				return this.axis && null != i && "dataMin" !== i && "function" != typeof i && !F(i) && (i = this.axis.scale.parse(
					i)), i
			},
			getMax: function(t) {
				var e = this.option,
					i = t || null == e.rangeEnd ? e.max : e.rangeEnd;
				return this.axis && null != i && "dataMax" !== i && "function" != typeof i && !F(i) && (i = this.axis.scale.parse(
					i)), i
			},
			getNeedCrossZero: function() {
				var t = this.option;
				return null == t.rangeStart && null == t.rangeEnd && !t.scale
			},
			getCoordSysModel: et,
			setRange: function(t, e) {
				this.option.rangeStart = t, this.option.rangeEnd = e
			},
			resetRange: function() {
				this.option.rangeStart = this.option.rangeEnd = null
			}
		},
		Zp = ds({
			type: "triangle",
			shape: {
				cx: 0,
				cy: 0,
				width: 0,
				height: 0
			},
			buildPath: function(t, e) {
				var i = e.cx,
					n = e.cy,
					a = e.width / 2,
					o = e.height / 2;
				t.moveTo(i, n - o), t.lineTo(i + a, n + o), t.lineTo(i - a, n + o), t.closePath()
			}
		}),
		Up = ds({
			type: "diamond",
			shape: {
				cx: 0,
				cy: 0,
				width: 0,
				height: 0
			},
			buildPath: function(t, e) {
				var i = e.cx,
					n = e.cy,
					a = e.width / 2,
					o = e.height / 2;
				t.moveTo(i, n - o), t.lineTo(i + a, n), t.lineTo(i, n + o), t.lineTo(i - a, n), t.closePath()
			}
		}),
		Xp = ds({
			type: "pin",
			shape: {
				x: 0,
				y: 0,
				width: 0,
				height: 0
			},
			buildPath: function(t, e) {
				var i = e.x,
					n = e.y,
					a = e.width / 5 * 3,
					o = Math.max(a, e.height),
					r = a / 2,
					s = r * r / (o - r),
					l = n - o + r + s,
					u = Math.asin(s / r),
					h = Math.cos(u) * r,
					c = Math.sin(u),
					d = Math.cos(u),
					f = .6 * r,
					p = .7 * r;
				t.moveTo(i - h, l + s), t.arc(i, l, r, Math.PI - u, 2 * Math.PI + u), t.bezierCurveTo(i + h - c * f, l + s + d *
					f, i, n - p, i, n), t.bezierCurveTo(i, n - p, i - h + c * f, l + s + d * f, i - h, l + s), t.closePath()
			}
		}),
		Yp = ds({
			type: "arrow",
			shape: {
				x: 0,
				y: 0,
				width: 0,
				height: 0
			},
			buildPath: function(t, e) {
				var i = e.height,
					n = e.width,
					a = e.x,
					o = e.y,
					r = n / 3 * 2;
				t.moveTo(a, o), t.lineTo(a + r, o + i), t.lineTo(a, o + i / 4 * 3), t.lineTo(a - r, o + i), t.lineTo(a, o), t.closePath()
			}
		}),
		jp = {
			line: function(t, e, i, n, a) {
				a.x1 = t, a.y1 = e + n / 2, a.x2 = t + i, a.y2 = e + n / 2
			},
			rect: function(t, e, i, n, a) {
				a.x = t, a.y = e, a.width = i, a.height = n
			},
			roundRect: function(t, e, i, n, a) {
				a.x = t, a.y = e, a.width = i, a.height = n, a.r = Math.min(i, n) / 4
			},
			square: function(t, e, i, n, a) {
				var o = Math.min(i, n);
				a.x = t, a.y = e, a.width = o, a.height = o
			},
			circle: function(t, e, i, n, a) {
				a.cx = t + i / 2, a.cy = e + n / 2, a.r = Math.min(i, n) / 2
			},
			diamond: function(t, e, i, n, a) {
				a.cx = t + i / 2, a.cy = e + n / 2, a.width = i, a.height = n
			},
			pin: function(t, e, i, n, a) {
				a.x = t + i / 2, a.y = e + n / 2, a.width = i, a.height = n
			},
			arrow: function(t, e, i, n, a) {
				a.x = t + i / 2, a.y = e + n / 2, a.width = i, a.height = n
			},
			triangle: function(t, e, i, n, a) {
				a.cx = t + i / 2, a.cy = e + n / 2, a.width = i, a.height = n
			}
		},
		qp = {};
	E({
		line: Ur,
		rect: Hr,
		roundRect: Hr,
		square: Hr,
		circle: Lr,
		diamond: Up,
		pin: Xp,
		arrow: Yp,
		triangle: Zp
	}, function(t, e) {
		qp[e] = new t
	});
	var Kp = ds({
		type: "symbol",
		shape: {
			symbolType: "",
			x: 0,
			y: 0,
			width: 0,
			height: 0
		},
		calculateTextPosition: function(t, e, i) {
			var n = dn(t, e, i),
				a = this.shape;
			return a && "pin" === a.symbolType && "inside" === e.textPosition && (n.y = i.y + .4 * i.height), n
		},
		buildPath: function(t, e, i) {
			var n = e.symbolType;
			if ("none" !== n) {
				var a = qp[n];
				a = a || qp[n = "rect"], jp[n](e.x, e.y, e.width, e.height, a.shape), a.buildPath(t, a.shape, i)
			}
		}
	});

	function $p(t, e) {
		if ("image" !== this.type) {
			var i = this.style,
				n = this.shape;
			n && "line" === n.symbolType ? i.stroke = t : this.__isEmptyBrush ? (i.stroke = t, i.fill = e || "#fff") : (i.fill &&
				(i.fill = t), i.stroke && (i.stroke = t)), this.dirty(!1)
		}
	}

	function Jp(t, e, i, n, a, o, r) {
		var s, l = 0 === t.indexOf("empty");
		return l && (t = t.substr(5, 1).toLowerCase() + t.substr(6)), (s = 0 === t.indexOf("image://") ? ms(t.slice(8), new bi(
			e, i, n, a), r ? "center" : "cover") : 0 === t.indexOf("path://") ? gs(t.slice(7), {}, new bi(e, i, n, a), r ?
			"center" : "cover") : new Kp({
			shape: {
				symbolType: t,
				x: e,
				y: i,
				width: n,
				height: a
			}
		})).__isEmptyBrush = l, s.setColor = $p, s.setColor(o), s
	}
	var Qp = {
		isDimensionStacked: Zf,
		enableDataStack: Hf,
		getStackedDimension: Uf
	};
	var tg = (Object.freeze || Object)({
			createList: function(t) {
				return Xf(t.getSource(), t)
			},
			getLayoutRect: au,
			dataStack: Qp,
			createScale: function(t, e) {
				var i = e;
				dl.isInstance(e) || b(i = new dl(e), Hp);
				var n = Bp(i);
				return n.setExtent(t[0], t[1]), zp(n, i), n
			},
			mixinAxisModelCommonMethods: function(t) {
				b(t, Hp)
			},
			completeDimensions: Gf,
			createDimensions: Wf,
			createSymbol: Jp
		}),
		eg = 1e-8;

	function ig(t, e) {
		return Math.abs(t - e) < eg
	}

	function ng(t, e, i) {
		var n = 0,
			a = t[0];
		if (!a) return !1;
		for (var o = 1; o < t.length; o++) {
			var r = t[o];
			n += $o(a[0], a[1], r[0], r[1], e, i), a = r
		}
		var s = t[0];
		return ig(a[0], s[0]) && ig(a[1], s[1]) || (n += $o(a[0], a[1], s[0], s[1], e, i)), 0 !== n
	}

	function ag(t, e, i) {
		if (this.name = t, this.geometries = e, i) i = [i[0], i[1]];
		else {
			var n = this.getBoundingRect();
			i = [n.x + n.width / 2, n.y + n.height / 2]
		}
		this.center = i
	}

	function og(t, e, i) {
		for (var n = [], a = e[0], o = e[1], r = 0; r < t.length; r += 2) {
			var s = t.charCodeAt(r) - 64,
				l = t.charCodeAt(r + 1) - 64;
			s = s >> 1 ^ -(1 & s), l = l >> 1 ^ -(1 & l), a = s += a, o = l += o, n.push([s / i, l / i])
		}
		return n
	}
	ag.prototype = {
		constructor: ag,
		properties: null,
		getBoundingRect: function() {
			var t = this._rect;
			if (t) return t;
			for (var e = Number.MAX_VALUE, i = [e, e], n = [-e, -e], a = [], o = [], r = this.geometries, s = 0; s < r.length; s++) {
				if ("polygon" === r[s].type) Io(r[s].exterior, a, o), St(i, i, a), Mt(n, n, o)
			}
			return 0 === s && (i[0] = i[1] = n[0] = n[1] = 0), this._rect = new bi(i[0], i[1], n[0] - i[0], n[1] - i[1])
		},
		contain: function(t) {
			var e = this.getBoundingRect(),
				i = this.geometries;
			if (!e.contain(t[0], t[1])) return !1;
			t: for (var n = 0, a = i.length; n < a; n++)
				if ("polygon" === i[n].type) {
					var o = i[n].exterior,
						r = i[n].interiors;
					if (ng(o, t[0], t[1])) {
						for (var s = 0; s < (r ? r.length : 0); s++)
							if (ng(r[s])) continue t;
						return !0
					}
				}
			return !1
		},
		transformTo: function(t, e, i, n) {
			var a = this.getBoundingRect(),
				o = a.width / a.height;
			i ? n = n || i / o : i = o * n;
			for (var r = new bi(t, e, i, n), s = a.calculateTransform(r), l = this.geometries, u = 0; u < l.length; u++)
				if ("polygon" === l[u].type) {
					for (var h = l[u].exterior, c = l[u].interiors, d = 0; d < h.length; d++) bt(h[d], h[d], s);
					for (var f = 0; f < (c ? c.length : 0); f++)
						for (d = 0; d < c[f].length; d++) bt(c[f][d], c[f][d], s)
				}(a = this._rect). copy(r), this.center = [a.x + a.width / 2, a.y + a.height / 2]
		},
		cloneShallow: function(t) {
			null == t && (t = this.name);
			var e = new ag(t, this.geometries, this.center);
			return e._rect = this._rect, e.transformTo = null, e
		}
	};

	function rg(t) {
		return function(t) {
			if (!t.UTF8Encoding) return;
			var e = t.UTF8Scale;
			null == e && (e = 1024);
			for (var i = t.features, n = 0; n < i.length; n++)
				for (var a = i[n].geometry, o = a.coordinates, r = a.encodeOffsets, s = 0; s < o.length; s++) {
					var l = o[s];
					if ("Polygon" === a.type) o[s] = og(l, r[s], e);
					else if ("MultiPolygon" === a.type)
						for (var u = 0; u < l.length; u++) {
							var h = l[u];
							l[u] = og(h, r[s][u], e)
						}
				}
			t.UTF8Encoding = !1
		}(t), N(M(t.features, function(t) {
			return t.geometry && t.properties && 0 < t.geometry.coordinates.length
		}), function(t) {
			var e = t.properties,
				i = t.geometry,
				n = i.coordinates,
				a = [];
			"Polygon" === i.type && a.push({
				type: "polygon",
				exterior: n[0],
				interiors: n.slice(1)
			}), "MultiPolygon" === i.type && E(n, function(t) {
				t[0] && a.push({
					type: "polygon",
					exterior: t[0],
					interiors: t.slice(1)
				})
			});
			var o = new ag(e.name, a, e.cp);
			return o.properties = e, o
		})
	}
	var sg = La();

	function lg(t) {
		return "category" === t.type ? function(t) {
			var e = t.getLabelModel(),
				i = hg(t, e);
			return !e.get("show") || t.scale.isBlank() ? {
				labels: [],
				labelCategoryInterval: i.labelCategoryInterval
			} : i
		}(t) : function(i) {
			var t = i.scale.getTicks(),
				n = Vp(i);
			return {
				labels: N(t, function(t, e) {
					return {
						formattedLabel: n(t, e),
						rawLabel: i.scale.getLabel(t),
						tickValue: t
					}
				})
			}
		}(t)
	}

	function ug(t, e) {
		return "category" === t.type ? function(t, e) {
			var i, n, a = cg(t, "ticks"),
				o = Fp(e),
				r = dg(a, o);
			if (r) return r;
			e.get("show") && !t.scale.isBlank() || (i = []);
			if (O(o)) i = gg(t, o, !0);
			else if ("auto" === o) {
				var s = hg(t, t.getLabelModel());
				n = s.labelCategoryInterval, i = N(s.labels, function(t) {
					return t.tickValue
				})
			} else i = pg(t, n = o, !0);
			return fg(a, o, {
				ticks: i,
				tickCategoryInterval: n
			})
		}(t, e) : {
			ticks: t.scale.getTicks()
		}
	}

	function hg(t, e) {
		var i, n = cg(t, "labels"),
			a = Fp(e),
			o = dg(n, a);
		return o || fg(n, a, {
			labels: O(a) ? gg(t, a) : pg(t, i = "auto" === a ? function(t) {
				var e = sg(t).autoInterval;
				return null != e ? e : sg(t).autoInterval = t.calculateCategoryInterval()
			}(t) : a),
			labelCategoryInterval: i
		})
	}

	function cg(t, e) {
		return sg(t)[e] || (sg(t)[e] = [])
	}

	function dg(t, e) {
		for (var i = 0; i < t.length; i++)
			if (t[i].key === e) return t[i].value
	}

	function fg(t, e, i) {
		return t.push({
			key: e,
			value: i
		}), i
	}

	function pg(t, e, i) {
		var n = Vp(t),
			a = t.scale,
			o = a.getExtent(),
			r = t.getLabelModel(),
			s = [],
			l = Math.max((e || 0) + 1, 1),
			u = o[0],
			h = a.count();
		0 !== u && 1 < l && 2 < h / l && (u = Math.round(Math.ceil(u / l) * l));
		var c = Wp(t),
			d = r.get("showMinLabel") || c,
			f = r.get("showMaxLabel") || c;
		d && u !== o[0] && g(o[0]);
		for (var p = u; p <= o[1]; p += l) g(p);

		function g(t) {
			s.push(i ? t : {
				formattedLabel: n(t),
				rawLabel: a.getLabel(t),
				tickValue: t
			})
		}
		return f && p - l !== o[1] && g(o[1]), s
	}

	function gg(t, i, n) {
		var a = t.scale,
			o = Vp(t),
			r = [];
		return E(a.getTicks(), function(t) {
			var e = a.getLabel(t);
			i(t, e) && r.push(n ? t : {
				formattedLabel: o(t),
				rawLabel: e,
				tickValue: t
			})
		}), r
	}
	var mg = [0, 1],
		vg = function(t, e, i) {
			this.dim = t, this.scale = e, this._extent = i || [0, 0], this.inverse = !1, this.onBand = !1
		};

	function yg(t, e) {
		var i = (t[1] - t[0]) / e / 2;
		t[0] += i, t[1] -= i
	}
	vg.prototype = {
		constructor: vg,
		contain: function(t) {
			var e = this._extent,
				i = Math.min(e[0], e[1]),
				n = Math.max(e[0], e[1]);
			return i <= t && t <= n
		},
		containData: function(t) {
			return this.contain(this.dataToCoord(t))
		},
		getExtent: function() {
			return this._extent.slice()
		},
		getPixelPrecision: function(t) {
			return Ml(t || this.scale.getExtent(), this._extent)
		},
		setExtent: function(t, e) {
			var i = this._extent;
			i[0] = t, i[1] = e
		},
		dataToCoord: function(t, e) {
			var i = this._extent,
				n = this.scale;
			return t = n.normalize(t), this.onBand && "ordinal" === n.type && yg(i = i.slice(), n.count()), yl(t, mg, i, e)
		},
		coordToData: function(t, e) {
			var i = this._extent,
				n = this.scale;
			this.onBand && "ordinal" === n.type && yg(i = i.slice(), n.count());
			var a = yl(t, i, mg, e);
			return this.scale.scale(a)
		},
		pointToData: function(t, e) {},
		getTicksCoords: function(t) {
			var e = (t = t || {}).tickModel || this.getTickModel(),
				i = N(ug(this, e).ticks, function(t) {
					return {
						coord: this.dataToCoord(t),
						tickValue: t
					}
				}, this);
			return function(t, e, i, n) {
				var a = e.length;
				if (!t.onBand || i || !a) return;
				var o, r, s = t.getExtent();
				if (1 === a) e[0].coord = s[0], o = e[1] = {
					coord: s[0]
				};
				else {
					var l = e[a - 1].tickValue - e[0].tickValue,
						u = (e[a - 1].coord - e[0].coord) / l;
					E(e, function(t) {
						t.coord -= u / 2
					});
					var h = t.scale.getExtent();
					r = 1 + h[1] - e[a - 1].tickValue, o = {
						coord: e[a - 1].coord + u * r
					}, e.push(o)
				}
				var c = s[0] > s[1];
				d(e[0].coord, s[0]) && (n ? e[0].coord = s[0] : e.shift());
				n && d(s[0], e[0].coord) && e.unshift({
					coord: s[0]
				});
				d(s[1], o.coord) && (n ? o.coord = s[1] : e.pop());
				n && d(o.coord, s[1]) && e.push({
					coord: s[1]
				});

				function d(t, e) {
					return t = _l(t), e = _l(e), c ? e < t : t < e
				}
			}(this, i, e.get("alignWithLabel"), t.clamp), i
		},
		getViewLabels: function() {
			return lg(this).labels
		},
		getLabelModel: function() {
			return this.model.getModel("axisLabel")
		},
		getTickModel: function() {
			return this.model.getModel("axisTick")
		},
		getBandWidth: function() {
			var t = this._extent,
				e = this.scale.getExtent(),
				i = e[1] - e[0] + (this.onBand ? 1 : 0);
			0 === i && (i = 1);
			var n = Math.abs(t[1] - t[0]);
			return Math.abs(n) / i
		},
		isHorizontal: null,
		getRotate: null,
		calculateCategoryInterval: function() {
			return function(t) {
				var e = function(t) {
						var e = t.getLabelModel();
						return {
							axisRotate: t.getRotate ? t.getRotate() : t.isHorizontal && !t.isHorizontal() ? 90 : 0,
							labelRotate: e.get("rotate") || 0,
							font: e.getFont()
						}
					}(t),
					i = Vp(t),
					n = (e.axisRotate - e.labelRotate) / 180 * Math.PI,
					a = t.scale,
					o = a.getExtent(),
					r = a.count();
				if (o[1] - o[0] < 1) return 0;
				var s = 1;
				40 < r && (s = Math.max(1, Math.floor(r / 40)));
				for (var l = o[0], u = t.dataToCoord(l + 1) - t.dataToCoord(l), h = Math.abs(u * Math.cos(n)), c = Math.abs(u *
						Math.sin(n)), d = 0, f = 0; l <= o[1]; l += s) {
					var p, g, m = un(i(l), e.font, "center", "top");
					p = 1.3 * m.width, g = 1.3 * m.height, d = Math.max(d, p, 7), f = Math.max(f, g, 7)
				}
				var v = d / h,
					y = f / c;
				isNaN(v) && (v = 1 / 0), isNaN(y) && (y = 1 / 0);
				var x = Math.max(0, Math.floor(Math.min(v, y))),
					_ = sg(t.model),
					w = t.getExtent(),
					b = _.lastAutoInterval,
					S = _.lastTickCount;
				return null != b && null != S && Math.abs(b - x) <= 1 && Math.abs(S - r) <= 1 && x < b && _.axisExtend0 === w[0] &&
					_.axisExtend1 === w[1] ? x = b : (_.lastTickCount = r, _.lastAutoInterval = x, _.axisExtend0 = w[0], _.axisExtend1 =
						w[1]), x
			}(this)
		}
	};
	var xg = rg,
		_g = {};
	E(["map", "each", "filter", "indexOf", "inherits", "reduce", "filter", "bind", "curry", "isArray", "isString",
		"isObject", "isFunction", "extend", "defaults", "clone", "merge"
	], function(t) {
		_g[t] = it[t]
	});
	var wg = {};

	function bg(t, e) {
		var i = t.mapDimension("defaultedLabel", !0),
			n = i.length;
		if (1 === n) return Mh(t, e, i[0]);
		if (n) {
			for (var a = [], o = 0; o < i.length; o++) {
				var r = Mh(t, e, i[o]);
				a.push(r)
			}
			return a.join(" ")
		}
	}

	function Sg(t, e, i) {
		Si.call(this), this.updateData(t, e, i)
	}
	E(["extendShape", "extendPath", "makePath", "makeImage", "mergePath", "resizePath", "createIcon", "setHoverStyle",
		"setLabelStyle", "setTextStyle", "setText", "getFont", "updateProps", "initProps", "getTransform",
		"clipPointsByRect", "clipRectByRect", "registerShape", "getShapeClass", "Group", "Image", "Text", "Circle",
		"Sector", "Ring", "Polygon", "Polyline", "Rect", "Line", "BezierCurve", "Arc", "IncrementalDisplayable",
		"CompoundPath", "LinearGradient", "RadialGradient", "BoundingRect"
	], function(t) {
		wg[t] = ol[t]
	}), Wh.extend({
		type: "series.line",
		dependencies: ["grid", "polar"],
		getInitialData: function(t, e) {
			return Xf(this.getSource(), this)
		},
		defaultOption: {
			zlevel: 0,
			z: 2,
			coordinateSystem: "cartesian2d",
			legendHoverLink: !0,
			hoverAnimation: !0,
			clip: !0,
			label: {
				position: "top"
			},
			lineStyle: {
				width: 2,
				type: "solid"
			},
			step: !1,
			smooth: !1,
			smoothMonotone: null,
			symbol: "emptyCircle",
			symbolSize: 4,
			symbolRotate: null,
			showSymbol: !0,
			showAllSymbol: "auto",
			connectNulls: !1,
			sampling: "none",
			animationEasing: "linear",
			progressive: 0,
			hoverLayerThreshold: 1 / 0
		}
	});
	var Mg = Sg.prototype,
		Ig = Sg.getSymbolSize = function(t, e) {
			var i = t.getItemVisual(e, "symbolSize");
			return i instanceof Array ? i.slice() : [+i, +i]
		};

	function Ag(t) {
		return [t[0] / 2, t[1] / 2]
	}

	function Tg(t, e) {
		this.parent.drift(t, e)
	}
	Mg._createSymbol = function(t, e, i, n, a) {
		this.removeAll();
		var o = Jp(t, -1, -1, 2, 2, e.getItemVisual(i, "color"), a);
		o.attr({
			z2: 100,
			culling: !0,
			scale: Ag(n)
		}), o.drift = Tg, this._symbolType = t, this.add(o)
	}, Mg.stopSymbolAnimation = function(t) {
		this.childAt(0).stopAnimation(t)
	}, Mg.getSymbolPath = function() {
		return this.childAt(0)
	}, Mg.getScale = function() {
		return this.childAt(0).scale
	}, Mg.highlight = function() {
		this.childAt(0).trigger("emphasis")
	}, Mg.downplay = function() {
		this.childAt(0).trigger("normal")
	}, Mg.setZ = function(t, e) {
		var i = this.childAt(0);
		i.zlevel = t, i.z = e
	}, Mg.setDraggable = function(t) {
		var e = this.childAt(0);
		e.draggable = t, e.cursor = t ? "move" : e.cursor
	}, Mg.updateData = function(t, e, i) {
		this.silent = !1;
		var n = t.getItemVisual(e, "symbol") || "circle",
			a = t.hostModel,
			o = Ig(t, e),
			r = n !== this._symbolType;
		if (r) {
			var s = t.getItemVisual(e, "symbolKeepAspect");
			this._createSymbol(n, t, e, o, s)
		} else {
			(l = this.childAt(0)).silent = !1, js(l, {
				scale: Ag(o)
			}, a, e)
		}
		if (this._updateCommon(t, e, o, i), r) {
			var l = this.childAt(0),
				u = i && i.fadeIn,
				h = {
					scale: l.scale.slice()
				};
			u && (h.style = {
				opacity: l.style.opacity
			}), l.scale = [0, 0], u && (l.style.opacity = 0), qs(l, h, a, e)
		}
		this._seriesModel = a
	};
	var Dg = ["itemStyle"],
		Cg = ["emphasis", "itemStyle"],
		Lg = ["label"],
		kg = ["emphasis", "label"];

	function Pg(t, e) {
		if (!this.incremental && !this.useHoverLayer)
			if ("emphasis" === e) {
				var i = this.__symbolOriginalScale,
					n = i[1] / i[0],
					a = {
						scale: [Math.max(1.1 * i[0], i[0] + 3), Math.max(1.1 * i[1], i[1] + 3 * n)]
					};
				this.animateTo(a, 400, "elasticOut")
			} else "normal" === e && this.animateTo({
				scale: this.__symbolOriginalScale
			}, 400, "elasticOut")
	}

	function Ng(t) {
		this.group = new Si, this._symbolCtor = t || Sg
	}
	Mg._updateCommon = function(i, t, e, n) {
		var a = this.childAt(0),
			o = i.hostModel,
			r = i.getItemVisual(t, "color");
		"image" !== a.type ? a.useStyle({
			strokeNoScale: !0
		}) : a.setStyle({
			opacity: null,
			shadowBlur: null,
			shadowOffsetX: null,
			shadowOffsetY: null,
			shadowColor: null
		});
		var s = n && n.itemStyle,
			l = n && n.hoverItemStyle,
			u = n && n.symbolRotate,
			h = n && n.symbolOffset,
			c = n && n.labelModel,
			d = n && n.hoverLabelModel,
			f = n && n.hoverAnimation,
			p = n && n.cursorStyle;
		if (!n || i.hasItemOption) {
			var g = n && n.itemModel ? n.itemModel : i.getItemModel(t);
			s = g.getModel(Dg).getItemStyle(["color"]), l = g.getModel(Cg).getItemStyle(), u = g.getShallow("symbolRotate"), h =
				g.getShallow("symbolOffset"), c = g.getModel(Lg), d = g.getModel(kg), f = g.getShallow("hoverAnimation"), p = g.getShallow(
					"cursor")
		} else l = L({}, l);
		var m = a.style;
		a.attr("rotation", (u || 0) * Math.PI / 180 || 0), h && a.attr("position", [xl(h[0], e[0]), xl(h[1], e[1])]), p &&
			a.attr("cursor", p), a.setColor(r, n && n.symbolInnerColor), a.setStyle(s);
		var v = i.getItemVisual(t, "opacity");
		null != v && (m.opacity = v);
		var y = i.getItemVisual(t, "liftZ"),
			x = a.__z2Origin;
		null != y ? null == x && (a.__z2Origin = a.z2, a.z2 += y) : null != x && (a.z2 = x, a.__z2Origin = null);
		var _ = n && n.useNameLabel;
		Bs(m, l, c, d, {
				labelFetcher: o,
				labelDataIndex: t,
				defaultText: function(t, e) {
					return _ ? i.getName(t) : bg(i, t)
				},
				isRectText: !0,
				autoColor: r
			}), a.__symbolOriginalScale = Ag(e), a.hoverStyle = l, a.highDownOnUpdate = f && o.isAnimationEnabled() ? Pg :
			null, Os(a)
	}, Mg.fadeOut = function(t, e) {
		var i = this.childAt(0);
		this.silent = i.silent = !0, e && e.keepLabel || (i.style.text = null), js(i, {
			style: {
				opacity: 0
			},
			scale: [0, 0]
		}, this._seriesModel, this.dataIndex, t)
	}, w(Sg, Si);
	var Og = Ng.prototype;

	function Eg(t, e, i, n) {
		return e && !isNaN(e[0]) && !isNaN(e[1]) && !(n.isIgnore && n.isIgnore(i)) && !(n.clipShape && !n.clipShape.contain(
			e[0], e[1])) && "none" !== t.getItemVisual(i, "symbol")
	}

	function Rg(t) {
		return null == t || z(t) || (t = {
			isIgnore: t
		}), t || {}
	}

	function zg(t) {
		var e = t.hostModel;
		return {
			itemStyle: e.getModel("itemStyle").getItemStyle(["color"]),
			hoverItemStyle: e.getModel("emphasis.itemStyle").getItemStyle(),
			symbolRotate: e.get("symbolRotate"),
			symbolOffset: e.get("symbolOffset"),
			hoverAnimation: e.get("hoverAnimation"),
			labelModel: e.getModel("label"),
			hoverLabelModel: e.getModel("emphasis.label"),
			cursorStyle: e.get("cursor")
		}
	}

	function Bg(t, e, i) {
		var n, a = t.getBaseAxis(),
			o = t.getOtherAxis(a),
			r = function(t, e) {
				var i = 0,
					n = t.scale.getExtent();
				"start" === e ? i = n[0] : "end" === e ? i = n[1] : 0 < n[0] ? i = n[0] : n[1] < 0 && (i = n[1]);
				return i
			}(o, i),
			s = a.dim,
			l = o.dim,
			u = e.mapDimension(l),
			h = e.mapDimension(s),
			c = "x" === l || "radius" === l ? 1 : 0,
			d = N(t.dimensions, function(t) {
				return e.mapDimension(t)
			}),
			f = e.getCalculationInfo("stackResultDimension");
		return (n |= Zf(e, d[0])) && (d[0] = f), (n |= Zf(e, d[1])) && (d[1] = f), {
			dataDimsForPoint: d,
			valueStart: r,
			valueAxisDim: l,
			baseAxisDim: s,
			stacked: !!n,
			valueDim: u,
			baseDim: h,
			baseDataOffset: c,
			stackedOverDimension: e.getCalculationInfo("stackedOverDimension")
		}
	}

	function Vg(t, e, i, n) {
		var a = NaN;
		t.stacked && (a = i.get(i.getCalculationInfo("stackedOverDimension"), n)), isNaN(a) && (a = t.valueStart);
		var o = t.baseDataOffset,
			r = [];
		return r[o] = i.get(t.baseDim, n), r[1 - o] = a, e.dataToPoint(r)
	}
	Og.updateData = function(a, o) {
		o = Rg(o);
		var r = this.group,
			s = a.hostModel,
			l = this._data,
			u = this._symbolCtor,
			h = zg(a);
		l || r.removeAll(), a.diff(l).add(function(t) {
			var e = a.getItemLayout(t);
			if (Eg(a, e, t, o)) {
				var i = new u(a, t, h);
				i.attr("position", e), a.setItemGraphicEl(t, i), r.add(i)
			}
		}).update(function(t, e) {
			var i = l.getItemGraphicEl(e),
				n = a.getItemLayout(t);
			Eg(a, n, t, o) ? (i ? (i.updateData(a, t, h), js(i, {
				position: n
			}, s)) : (i = new u(a, t)).attr("position", n), r.add(i), a.setItemGraphicEl(t, i)) : r.remove(i)
		}).remove(function(t) {
			var e = l.getItemGraphicEl(t);
			e && e.fadeOut(function() {
				r.remove(e)
			})
		}).execute(), this._data = a
	}, Og.isPersistent = function() {
		return !0
	}, Og.updateLayout = function() {
		var n = this._data;
		n && n.eachItemGraphicEl(function(t, e) {
			var i = n.getItemLayout(e);
			t.attr("position", i)
		})
	}, Og.incrementalPrepareUpdate = function(t) {
		this._seriesScope = zg(t), this._data = null, this.group.removeAll()
	}, Og.incrementalUpdate = function(t, e, i) {
		function n(t) {
			t.isGroup || (t.incremental = t.useHoverLayer = !0)
		}
		i = Rg(i);
		for (var a = t.start; a < t.end; a++) {
			var o = e.getItemLayout(a);
			if (Eg(e, o, a, i)) {
				var r = new this._symbolCtor(e, a, this._seriesScope);
				r.traverse(n), r.attr("position", o), this.group.add(r), e.setItemGraphicEl(a, r)
			}
		}
	}, Og.remove = function(t) {
		var e = this.group,
			i = this._data;
		i && t ? i.eachItemGraphicEl(function(t) {
			t.fadeOut(function() {
				e.remove(t)
			})
		}) : e.removeAll()
	};
	var Gg = St,
		Fg = Mt,
		Wg = ut,
		Hg = ot,
		Zg = [],
		Ug = [],
		Xg = [];

	function Yg(t) {
		return isNaN(t[0]) || isNaN(t[1])
	}

	function jg(t, e, i, n, a, o, r, s, l, u) {
		return "none" !== u && u ? function(t, e, i, n, a, o, r, s, l, u, h) {
			for (var c = 0, d = i, f = 0; f < n; f++) {
				var p = e[d];
				if (a <= d || d < 0) break;
				if (Yg(p)) {
					if (h) {
						d += o;
						continue
					}
					break
				}
				if (d === i) t[0 < o ? "moveTo" : "lineTo"](p[0], p[1]);
				else if (0 < l) {
					var g = e[c],
						m = "y" === u ? 1 : 0,
						v = (p[m] - g[m]) * l;
					Hg(Ug, g), Ug[m] = g[m] + v, Hg(Xg, p), Xg[m] = p[m] - v, t.bezierCurveTo(Ug[0], Ug[1], Xg[0], Xg[1], p[0], p[1])
				} else t.lineTo(p[0], p[1]);
				c = d, d += o
			}
			return f
		}.apply(this, arguments) : function(t, e, i, n, a, o, r, s, l, u, h) {
			for (var c = 0, d = i, f = 0; f < n; f++) {
				var p = e[d];
				if (a <= d || d < 0) break;
				if (Yg(p)) {
					if (h) {
						d += o;
						continue
					}
					break
				}
				if (d === i) t[0 < o ? "moveTo" : "lineTo"](p[0], p[1]), Hg(Ug, p);
				else if (0 < l) {
					var g = d + o,
						m = e[g];
					if (h)
						for (; m && Yg(e[g]);) m = e[g += o];
					var v = .5,
						y = e[c];
					if (!(m = e[g]) || Yg(m)) Hg(Xg, p);
					else {
						var x, _;
						if (Yg(m) && !h && (m = p), ht(Zg, m, y), "x" === u || "y" === u) {
							var w = "x" === u ? 0 : 1;
							x = Math.abs(p[w] - y[w]), _ = Math.abs(p[w] - m[w])
						} else x = yt(p, y), _ = yt(p, m);
						Wg(Xg, p, Zg, -l * (1 - (v = _ / (_ + x))))
					}
					Gg(Ug, Ug, s), Fg(Ug, Ug, r), Gg(Xg, Xg, s), Fg(Xg, Xg, r), t.bezierCurveTo(Ug[0], Ug[1], Xg[0], Xg[1], p[0], p[
						1]), Wg(Ug, p, Zg, l * v)
				} else t.lineTo(p[0], p[1]);
				c = d, d += o
			}
			return f
		}.apply(this, arguments)
	}

	function qg(t, e) {
		var i = [1 / 0, 1 / 0],
			n = [-1 / 0, -1 / 0];
		if (e)
			for (var a = 0; a < t.length; a++) {
				var o = t[a];
				o[0] < i[0] && (i[0] = o[0]), o[1] < i[1] && (i[1] = o[1]), o[0] > n[0] && (n[0] = o[0]), o[1] > n[1] && (n[1] = o[
					1])
			}
		return {
			min: e ? i : n,
			max: e ? n : i
		}
	}
	var Kg = hr.extend({
			type: "ec-polyline",
			shape: {
				points: [],
				smooth: 0,
				smoothConstraint: !0,
				smoothMonotone: null,
				connectNulls: !1
			},
			style: {
				fill: null,
				stroke: "#000"
			},
			brush: Cr(hr.prototype.brush),
			buildPath: function(t, e) {
				var i = e.points,
					n = 0,
					a = i.length,
					o = qg(i, e.smoothConstraint);
				if (e.connectNulls) {
					for (; 0 < a && Yg(i[a - 1]); a--);
					for (; n < a && Yg(i[n]); n++);
				}
				for (; n < a;) n += jg(t, i, n, a, a, 1, o.min, o.max, e.smooth, e.smoothMonotone, e.connectNulls) + 1
			}
		}),
		$g = hr.extend({
			type: "ec-polygon",
			shape: {
				points: [],
				stackedOnPoints: [],
				smooth: 0,
				stackedOnSmooth: 0,
				smoothConstraint: !0,
				smoothMonotone: null,
				connectNulls: !1
			},
			brush: Cr(hr.prototype.brush),
			buildPath: function(t, e) {
				var i = e.points,
					n = e.stackedOnPoints,
					a = 0,
					o = i.length,
					r = e.smoothMonotone,
					s = qg(i, e.smoothConstraint),
					l = qg(n, e.smoothConstraint);
				if (e.connectNulls) {
					for (; 0 < o && Yg(i[o - 1]); o--);
					for (; a < o && Yg(i[a]); a++);
				}
				for (; a < o;) {
					var u = jg(t, i, a, o, o, 1, s.min, s.max, e.smooth, r, e.connectNulls);
					jg(t, n, a + u - 1, u, o, -1, l.min, l.max, e.stackedOnSmooth, r, e.connectNulls), a += u + 1, t.closePath()
				}
			}
		});

	function Jg(t, e, i) {
		var n = t.getArea(),
			a = t.getBaseAxis().isHorizontal(),
			o = n.x,
			r = n.y,
			s = n.width,
			l = n.height,
			u = i.get("lineStyle.width") || 2,
			h = new Hr({
				shape: {
					x: o -= u / 2,
					y: r -= u / 2,
					width: s += u,
					height: l += u
				}
			});
		return e && (h.shape[a ? "width" : "height"] = 0, qs(h, {
			shape: {
				width: s,
				height: l
			}
		}, i)), h
	}

	function Qg(t, e, i) {
		var n = t.getArea(),
			a = new Pr({
				shape: {
					cx: _l(t.cx, 1),
					cy: _l(t.cy, 1),
					r0: _l(n.r0, 1),
					r: _l(n.r, 1),
					startAngle: n.startAngle,
					endAngle: n.endAngle,
					clockwise: n.clockwise
				}
			});
		return e && (a.shape.endAngle = n.startAngle, qs(a, {
			shape: {
				endAngle: n.endAngle
			}
		}, i)), a
	}

	function tm(t, e, i) {
		return t ? "polar" === t.type ? Qg(t, e, i) : "cartesian2d" === t.type ? Jg(t, e, i) : null : null
	}

	function em(t, e) {
		if (t.length === e.length) {
			for (var i = 0; i < t.length; i++) {
				var n = t[i],
					a = e[i];
				if (n[0] !== a[0] || n[1] !== a[1]) return
			}
			return !0
		}
	}

	function im(t) {
		return "number" == typeof t ? t : t ? .5 : 0
	}

	function nm(t, e, i) {
		for (var n = e.getBaseAxis(), a = "x" === n.dim || "radius" === n.dim ? 0 : 1, o = [], r = 0; r < t.length - 1; r++) {
			var s = t[r + 1],
				l = t[r];
			o.push(l);
			var u = [];
			switch (i) {
				case "end":
					u[a] = s[a], u[1 - a] = l[1 - a], o.push(u);
					break;
				case "middle":
					var h = (l[a] + s[a]) / 2,
						c = [];
					u[a] = c[a] = h, u[1 - a] = l[1 - a], c[1 - a] = s[1 - a], o.push(u), o.push(c);
					break;
				default:
					u[a] = l[a], u[1 - a] = s[1 - a], o.push(u)
			}
		}
		return t[r] && o.push(t[r]), o
	}

	function am(t, e, i) {
		var n = t.get("showAllSymbol"),
			a = "auto" === n;
		if (!n || a) {
			var o = i.getAxesByScale("ordinal")[0];
			if (o && (!a || ! function(t, e) {
					var i = t.getExtent(),
						n = Math.abs(i[1] - i[0]) / t.scale.count();
					isNaN(n) && (n = 0);
					for (var a = e.count(), o = Math.max(1, Math.round(a / 5)), r = 0; r < a; r += o)
						if (1.5 * Sg.getSymbolSize(e, r)[t.isHorizontal() ? 1 : 0] > n) return !1;
					return !0
				}(o, e))) {
				var r = e.mapDimension(o.dim),
					s = {};
				return E(o.getViewLabels(), function(t) {
						s[t.tickValue] = 1
					}),
					function(t) {
						return !s.hasOwnProperty(e.get(r, t))
					}
			}
		}
	}

	function om(t, e, i) {
		if ("cartesian2d" !== t.type) return Qg(t, e, i);
		var n = t.getBaseAxis().isHorizontal(),
			a = Jg(t, e, i);
		if (!i.get("clip", !0)) {
			var o = a.shape,
				r = Math.max(o.width, o.height);
			n ? (o.y -= r, o.height += 2 * r) : (o.x -= r, o.width += 2 * r)
		}
		return a
	}
	ec.extend({
		type: "line",
		init: function() {
			var t = new Si,
				e = new Ng;
			this.group.add(e.group), this._symbolDraw = e, this._lineGroup = t
		},
		render: function(t, e, i) {
			var n = t.coordinateSystem,
				a = this.group,
				o = t.getData(),
				r = t.getModel("lineStyle"),
				s = t.getModel("areaStyle"),
				l = o.mapArray(o.getItemLayout),
				u = "polar" === n.type,
				h = this._coordSys,
				c = this._symbolDraw,
				d = this._polyline,
				f = this._polygon,
				p = this._lineGroup,
				g = t.get("animation"),
				m = !s.isEmpty(),
				v = s.get("origin"),
				y = function(t, e, i) {
					if (!i.valueDim) return [];
					for (var n = [], a = 0, o = e.count(); a < o; a++) n.push(Vg(i, t, e, a));
					return n
				}(n, o, Bg(n, o, v)),
				x = t.get("showSymbol"),
				_ = x && !u && am(t, o, n),
				w = this._data;
			w && w.eachItemGraphicEl(function(t, e) {
				t.__temp && (a.remove(t), w.setItemGraphicEl(e, null))
			}), x || c.remove(), a.add(p);
			var b, S = !u && t.get("step");
			n && n.getArea && (null != (b = n.getArea()).width ? (b.x -= .1, b.y -= .1, b.width += .2, b.height += .2) : b.r0 &&
				(b.r0 -= .5, b.r1 += .5)), d && h.type === n.type && S === this._step ? (m && !f ? f = this._newPolygon(l, y,
				n, g) : f && !m && (p.remove(f), f = this._polygon = null), p.setClipPath(om(n, !1, t)), x && c.updateData(o, {
				isIgnore: _,
				clipShape: b
			}), o.eachItemGraphicEl(function(t) {
				t.stopAnimation(!0)
			}), em(this._stackedOnPoints, y) && em(this._points, l) || (g ? this._updateAnimation(o, y, n, i, S, v) : (S &&
				(l = nm(l, n, S), y = nm(y, n, S)), d.setShape({
					points: l
				}), f && f.setShape({
					points: l,
					stackedOnPoints: y
				})))) : (x && c.updateData(o, {
				isIgnore: _,
				clipShape: b
			}), S && (l = nm(l, n, S), y = nm(y, n, S)), d = this._newPolyline(l, n, g), m && (f = this._newPolygon(l, y,
				n, g)), p.setClipPath(om(n, !0, t)));
			var M = function(t, e) {
				var i = t.getVisual("visualMeta");
				if (i && i.length && t.count() && "cartesian2d" === e.type) {
					for (var n, a, o = i.length - 1; 0 <= o; o--) {
						var r = i[o].dimension,
							s = t.dimensions[r],
							l = t.getDimensionInfo(s);
						if ("x" === (n = l && l.coordDim) || "y" === n) {
							a = i[o];
							break
						}
					}
					if (a) {
						var u = e.getAxis(n),
							h = N(a.stops, function(t) {
								return {
									coord: u.toGlobalCoord(u.dataToCoord(t.value)),
									color: t.color
								}
							}),
							c = h.length,
							d = a.outerColors.slice();
						c && h[0].coord > h[c - 1].coord && (h.reverse(), d.reverse());
						var f = h[0].coord - 10,
							p = h[c - 1].coord + 10,
							g = p - f;
						if (g < .001) return "transparent";
						E(h, function(t) {
							t.offset = (t.coord - f) / g
						}), h.push({
							offset: c ? h[c - 1].offset : .5,
							color: d[1] || "transparent"
						}), h.unshift({
							offset: c ? h[0].offset : .5,
							color: d[0] || "transparent"
						});
						var m = new Jr(0, 0, 0, 0, h, !0);
						return m[n] = f, m[n + "2"] = p, m
					}
				}
			}(o, n) || o.getVisual("color");
			d.useStyle(C(r.getLineStyle(), {
				fill: "none",
				stroke: M,
				lineJoin: "bevel"
			}));
			var I = t.get("smooth");
			if (I = im(t.get("smooth")), d.setShape({
					smooth: I,
					smoothMonotone: t.get("smoothMonotone"),
					connectNulls: t.get("connectNulls")
				}), f) {
				var A = o.getCalculationInfo("stackedOnSeries"),
					T = 0;
				f.useStyle(C(s.getAreaStyle(), {
					fill: M,
					opacity: .7,
					lineJoin: "bevel"
				})), A && (T = im(A.get("smooth"))), f.setShape({
					smooth: I,
					stackedOnSmooth: T,
					smoothMonotone: t.get("smoothMonotone"),
					connectNulls: t.get("connectNulls")
				})
			}
			this._data = o, this._coordSys = n, this._stackedOnPoints = y, this._points = l, this._step = S, this._valueOrigin =
				v
		},
		dispose: function() {},
		highlight: function(t, e, i, n) {
			var a = t.getData(),
				o = Ca(a, n);
			if (!(o instanceof Array) && null != o && 0 <= o) {
				var r = a.getItemGraphicEl(o);
				if (!r) {
					var s = a.getItemLayout(o);
					if (!s) return;
					(r = new Sg(a, o)).position = s, r.setZ(t.get("zlevel"), t.get("z")), r.ignore = isNaN(s[0]) || isNaN(s[1]), r
						.__temp = !0, a.setItemGraphicEl(o, r), r.stopSymbolAnimation(!0), this.group.add(r)
				}
				r.highlight()
			} else ec.prototype.highlight.call(this, t, e, i, n)
		},
		downplay: function(t, e, i, n) {
			var a = t.getData(),
				o = Ca(a, n);
			if (null != o && 0 <= o) {
				var r = a.getItemGraphicEl(o);
				r && (r.__temp ? (a.setItemGraphicEl(o, null), this.group.remove(r)) : r.downplay())
			} else ec.prototype.downplay.call(this, t, e, i, n)
		},
		_newPolyline: function(t) {
			var e = this._polyline;
			return e && this._lineGroup.remove(e), e = new Kg({
				shape: {
					points: t
				},
				silent: !0,
				z2: 10
			}), this._lineGroup.add(e), this._polyline = e
		},
		_newPolygon: function(t, e) {
			var i = this._polygon;
			return i && this._lineGroup.remove(i), i = new $g({
				shape: {
					points: t,
					stackedOnPoints: e
				},
				silent: !0
			}), this._lineGroup.add(i), this._polygon = i
		},
		_updateAnimation: function(t, e, i, n, a, o) {
			var r = this._polyline,
				s = this._polygon,
				l = t.hostModel,
				u = function(t, e, i, n, a, o, r, s) {
					for (var l = function(t, e) {
							var i = [];
							return e.diff(t).add(function(t) {
								i.push({
									cmd: "+",
									idx: t
								})
							}).update(function(t, e) {
								i.push({
									cmd: "=",
									idx: e,
									idx1: t
								})
							}).remove(function(t) {
								i.push({
									cmd: "-",
									idx: t
								})
							}).execute(), i
						}(t, e), u = [], h = [], c = [], d = [], f = [], p = [], g = [], m = Bg(a, e, r), v = Bg(o, t, s), y = 0; y <
						l.length; y++) {
						var x = l[y],
							_ = !0;
						switch (x.cmd) {
							case "=":
								var w = t.getItemLayout(x.idx),
									b = e.getItemLayout(x.idx1);
								(isNaN(w[0]) || isNaN(w[1])) && (w = b.slice()), u.push(w), h.push(b), c.push(i[x.idx]), d.push(n[x.idx1]),
									g.push(e.getRawIndex(x.idx1));
								break;
							case "+":
								var S = x.idx;
								u.push(a.dataToPoint([e.get(m.dataDimsForPoint[0], S), e.get(m.dataDimsForPoint[1], S)])), h.push(e.getItemLayout(
									S).slice()), c.push(Vg(m, a, e, S)), d.push(n[S]), g.push(e.getRawIndex(S));
								break;
							case "-":
								S = x.idx;
								var M = t.getRawIndex(S);
								M !== S ? (u.push(t.getItemLayout(S)), h.push(o.dataToPoint([t.get(v.dataDimsForPoint[0], S), t.get(v.dataDimsForPoint[
									1], S)])), c.push(i[S]), d.push(Vg(v, o, t, S)), g.push(M)) : _ = !1
						}
						_ && (f.push(x), p.push(p.length))
					}
					p.sort(function(t, e) {
						return g[t] - g[e]
					});
					var I = [],
						A = [],
						T = [],
						D = [],
						C = [];
					for (y = 0; y < p.length; y++) {
						S = p[y];
						I[y] = u[S], A[y] = h[S], T[y] = c[S], D[y] = d[S], C[y] = f[S]
					}
					return {
						current: I,
						next: A,
						stackedOnCurrent: T,
						stackedOnNext: D,
						status: C
					}
				}(this._data, t, this._stackedOnPoints, e, this._coordSys, i, this._valueOrigin, o),
				h = u.current,
				c = u.stackedOnCurrent,
				d = u.next,
				f = u.stackedOnNext;
			a && (h = nm(u.current, i, a), c = nm(u.stackedOnCurrent, i, a), d = nm(u.next, i, a), f = nm(u.stackedOnNext, i,
				a)), r.shape.__points = u.current, r.shape.points = h, js(r, {
				shape: {
					points: d
				}
			}, l), s && (s.setShape({
				points: h,
				stackedOnPoints: c
			}), js(s, {
				shape: {
					points: d,
					stackedOnPoints: f
				}
			}, l));
			for (var p = [], g = u.status, m = 0; m < g.length; m++) {
				if ("=" === g[m].cmd) {
					var v = t.getItemGraphicEl(g[m].idx1);
					v && p.push({
						el: v,
						ptIdx: m
					})
				}
			}
			r.animators && r.animators.length && r.animators[0].during(function() {
				for (var t = 0; t < p.length; t++) {
					p[t].el.attr("position", r.shape.__points[p[t].ptIdx])
				}
			})
		},
		remove: function(t) {
			var i = this.group,
				n = this._data;
			this._lineGroup.removeAll(), this._symbolDraw.remove(!0), n && n.eachItemGraphicEl(function(t, e) {
				t.__temp && (i.remove(t), n.setItemGraphicEl(e, null))
			}), this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._data = null
		}
	});

	function rm(t, r, s) {
		return {
			seriesType: t,
			performRawSeries: !0,
			reset: function(l, t, e) {
				var i = l.getData(),
					u = l.get("symbol"),
					h = l.get("symbolSize"),
					n = l.get("symbolKeepAspect"),
					c = O(u),
					d = O(h),
					f = c || d,
					a = !c && u ? u : r,
					o = d ? null : h;
				if (i.setVisual({
						legendSymbol: s || a,
						symbol: a,
						symbolSize: o,
						symbolKeepAspect: n
					}), !t.isSeriesFiltered(l)) return {
					dataEach: i.hasItemOption || f ? function(t, e) {
						if (f) {
							var i = l.getRawValue(e),
								n = l.getDataParams(e);
							c && t.setItemVisual(e, "symbol", u(i, n)), d && t.setItemVisual(e, "symbolSize", h(i, n))
						}
						if (t.hasItemOption) {
							var a = t.getItemModel(e),
								o = a.getShallow("symbol", !0),
								r = a.getShallow("symbolSize", !0),
								s = a.getShallow("symbolKeepAspect", !0);
							null != o && t.setItemVisual(e, "symbol", o), null != r && t.setItemVisual(e, "symbolSize", r), null != s &&
								t.setItemVisual(e, "symbolKeepAspect", s)
						}
					} : null
				}
			}
		}
	}

	function sm(t) {
		return {
			seriesType: t,
			plan: Jh(),
			reset: function(t) {
				var e = t.getData(),
					c = t.coordinateSystem,
					d = t.pipelineContext.large;
				if (c) {
					var f = N(c.dimensions, function(t) {
							return e.mapDimension(t)
						}).slice(0, 2),
						p = f.length,
						i = e.getCalculationInfo("stackResultDimension");
					return Zf(e, f[0]) && (f[0] = i), Zf(e, f[1]) && (f[1] = i), p && {
						progress: function(t, e) {
							for (var i = t.end - t.start, n = d && new Float32Array(i * p), a = t.start, o = 0, r = [], s = []; a < t.end; a++) {
								var l;
								if (1 === p) {
									var u = e.get(f[0], a);
									l = !isNaN(u) && c.dataToPoint(u, null, s)
								} else {
									u = r[0] = e.get(f[0], a);
									var h = r[1] = e.get(f[1], a);
									l = !isNaN(u) && !isNaN(h) && c.dataToPoint(r, null, s)
								}
								d ? (n[o++] = l ? l[0] : NaN, n[o++] = l ? l[1] : NaN) : e.setItemLayout(a, l && l.slice() || [NaN, NaN])
							}
							d && e.setLayout("symbolPoints", n)
						}
					}
				}
			}
		}
	}

	function lm(t, e) {
		return Math.round(t.length / 2)
	}
	var um = {
		average: function(t) {
			for (var e = 0, i = 0, n = 0; n < t.length; n++) isNaN(t[n]) || (e += t[n], i++);
			return 0 === i ? NaN : e / i
		},
		sum: function(t) {
			for (var e = 0, i = 0; i < t.length; i++) e += t[i] || 0;
			return e
		},
		max: function(t) {
			for (var e = -1 / 0, i = 0; i < t.length; i++) t[i] > e && (e = t[i]);
			return isFinite(e) ? e : NaN
		},
		min: function(t) {
			for (var e = 1 / 0, i = 0; i < t.length; i++) t[i] < e && (e = t[i]);
			return isFinite(e) ? e : NaN
		},
		nearest: function(t) {
			return t[0]
		}
	};

	function hm(t) {
		return this._axes[t]
	}

	function cm(t) {
		this._axes = {}, this._dimList = [], this.name = t || ""
	}

	function dm(t) {
		cm.call(this, t)
	}
	cm.prototype = {
		constructor: cm,
		type: "cartesian",
		getAxis: function(t) {
			return this._axes[t]
		},
		getAxes: function() {
			return N(this._dimList, hm, this)
		},
		getAxesByScale: function(e) {
			return e = e.toLowerCase(), M(this.getAxes(), function(t) {
				return t.scale.type === e
			})
		},
		addAxis: function(t) {
			var e = t.dim;
			this._axes[e] = t, this._dimList.push(e)
		},
		dataToCoord: function(t) {
			return this._dataCoordConvert(t, "dataToCoord")
		},
		coordToData: function(t) {
			return this._dataCoordConvert(t, "coordToData")
		},
		_dataCoordConvert: function(t, e) {
			for (var i = this._dimList, n = t instanceof Array ? [] : {}, a = 0; a < i.length; a++) {
				var o = i[a],
					r = this._axes[o];
				n[o] = r[e](t[o])
			}
			return n
		}
	}, dm.prototype = {
		constructor: dm,
		type: "cartesian2d",
		dimensions: ["x", "y"],
		getBaseAxis: function() {
			return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAxis("x")
		},
		containPoint: function(t) {
			var e = this.getAxis("x"),
				i = this.getAxis("y");
			return e.contain(e.toLocalCoord(t[0])) && i.contain(i.toLocalCoord(t[1]))
		},
		containData: function(t) {
			return this.getAxis("x").containData(t[0]) && this.getAxis("y").containData(t[1])
		},
		dataToPoint: function(t, e, i) {
			var n = this.getAxis("x"),
				a = this.getAxis("y");
			return (i = i || [])[0] = n.toGlobalCoord(n.dataToCoord(t[0])), i[1] = a.toGlobalCoord(a.dataToCoord(t[1])), i
		},
		clampData: function(t, e) {
			var i = this.getAxis("x").scale,
				n = this.getAxis("y").scale,
				a = i.getExtent(),
				o = n.getExtent(),
				r = i.parse(t[0]),
				s = n.parse(t[1]);
			return (e = e || [])[0] = Math.min(Math.max(Math.min(a[0], a[1]), r), Math.max(a[0], a[1])), e[1] = Math.min(Math
				.max(Math.min(o[0], o[1]), s), Math.max(o[0], o[1])), e
		},
		pointToData: function(t, e) {
			var i = this.getAxis("x"),
				n = this.getAxis("y");
			return (e = e || [])[0] = i.coordToData(i.toLocalCoord(t[0])), e[1] = n.coordToData(n.toLocalCoord(t[1])), e
		},
		getOtherAxis: function(t) {
			return this.getAxis("x" === t.dim ? "y" : "x")
		},
		getArea: function() {
			var t = this.getAxis("x").getGlobalExtent(),
				e = this.getAxis("y").getGlobalExtent(),
				i = Math.min(t[0], t[1]),
				n = Math.min(e[0], e[1]);
			return new bi(i, n, Math.max(t[0], t[1]) - i, Math.max(e[0], e[1]) - n)
		}
	}, w(dm, cm);

	function fm(t, e, i, n, a) {
		vg.call(this, t, e, i), this.type = n || "value", this.position = a || "bottom"
	}
	fm.prototype = {
		constructor: fm,
		index: 0,
		getAxesOnZeroOf: null,
		model: null,
		isHorizontal: function() {
			var t = this.position;
			return "top" === t || "bottom" === t
		},
		getGlobalExtent: function(t) {
			var e = this.getExtent();
			return e[0] = this.toGlobalCoord(e[0]), e[1] = this.toGlobalCoord(e[1]), t && e[0] > e[1] && e.reverse(), e
		},
		getOtherAxis: function() {
			this.grid.getOtherAxis()
		},
		pointToData: function(t, e) {
			return this.coordToData(this.toLocalCoord(t["x" === this.dim ? 0 : 1]), e)
		},
		toLocalCoord: null,
		toGlobalCoord: null
	}, w(fm, vg);
	var pm = {
			show: !0,
			zlevel: 0,
			z: 0,
			inverse: !1,
			name: "",
			nameLocation: "end",
			nameRotate: null,
			nameTruncate: {
				maxWidth: null,
				ellipsis: "...",
				placeholder: "."
			},
			nameTextStyle: {},
			nameGap: 15,
			silent: !1,
			triggerEvent: !1,
			tooltip: {
				show: !1
			},
			axisPointer: {},
			axisLine: {
				show: !0,
				onZero: !0,
				onZeroAxisIndex: null,
				lineStyle: {
					color: "#333",
					width: 1,
					type: "solid"
				},
				symbol: ["none", "none"],
				symbolSize: [10, 15]
			},
			axisTick: {
				show: !0,
				inside: !1,
				length: 5,
				lineStyle: {
					width: 1
				}
			},
			axisLabel: {
				show: !0,
				inside: !1,
				rotate: 0,
				showMinLabel: null,
				showMaxLabel: null,
				margin: 8,
				fontSize: 12
			},
			splitLine: {
				show: !0,
				lineStyle: {
					color: ["#ccc"],
					width: 1,
					type: "solid"
				}
			},
			splitArea: {
				show: !1,
				areaStyle: {
					color: ["rgba(250,250,250,0.3)", "rgba(200,200,200,0.3)"]
				}
			}
		},
		gm = {};
	gm.categoryAxis = m({
		boundaryGap: !0,
		deduplication: null,
		splitLine: {
			show: !1
		},
		axisTick: {
			alignWithLabel: !1,
			interval: "auto"
		},
		axisLabel: {
			interval: "auto"
		}
	}, pm), gm.valueAxis = m({
		boundaryGap: [0, 0],
		splitNumber: 5
	}, pm), gm.timeAxis = C({
		scale: !0,
		min: "dataMin",
		max: "dataMax"
	}, gm.valueAxis), gm.logAxis = C({
		scale: !0,
		logBase: 10
	}, gm.valueAxis);

	function mm(o, t, r, e) {
		E(vm, function(a) {
			t.extend({
				type: o + "Axis." + a,
				mergeDefaultAndTheme: function(t, e) {
					var i = this.layoutMode,
						n = i ? su(t) : {};
					m(t, e.getTheme().get(a + "Axis")), m(t, this.getDefaultOption()), t.type = r(o, t), i && ru(t, n, i)
				},
				optionUpdated: function() {
					"category" === this.option.type && (this.__ordinalMeta = jf.createByAxisModel(this))
				},
				getCategories: function(t) {
					var e = this.option;
					if ("category" === e.type) return t ? e.data : this.__ordinalMeta.categories
				},
				getOrdinalMeta: function() {
					return this.__ordinalMeta
				},
				defaultOption: p([{}, gm[a + "Axis"], e], !0)
			})
		}), fu.registerSubTypeDefaulter(o + "Axis", A(r, o))
	}
	var vm = ["value", "category", "time", "log"],
		ym = fu.extend({
			type: "cartesian2dAxis",
			axis: null,
			init: function() {
				ym.superApply(this, "init", arguments), this.resetRange()
			},
			mergeOption: function() {
				ym.superApply(this, "mergeOption", arguments), this.resetRange()
			},
			restoreData: function() {
				ym.superApply(this, "restoreData", arguments), this.resetRange()
			},
			getCoordSysModel: function() {
				return this.ecModel.queryComponents({
					mainType: "grid",
					index: this.option.gridIndex,
					id: this.option.gridId
				})[0]
			}
		});

	function xm(t, e) {
		return e.type || (e.data ? "category" : "value")
	}
	m(ym.prototype, Hp);
	var _m = {
		offset: 0
	};

	function wm(t, e) {
		return t.getCoordSysModel() === e
	}

	function bm(t, e, i) {
		this._coordsMap = {}, this._coordsList = [], this._axesMap = {}, this._axesList = [], this._initCartesian(t, e, i),
			this.model = t
	}
	mm("x", ym, xm, _m), mm("y", ym, xm, _m), fu.extend({
		type: "grid",
		dependencies: ["xAxis", "yAxis"],
		layoutMode: "box",
		coordinateSystem: null,
		defaultOption: {
			show: !1,
			zlevel: 0,
			z: 0,
			left: "10%",
			top: 60,
			right: "10%",
			bottom: 60,
			containLabel: !1,
			backgroundColor: "rgba(0,0,0,0)",
			borderWidth: 1,
			borderColor: "#ccc"
		}
	});
	var Sm = bm.prototype;

	function Mm(t, e, i, n) {
		i.getAxesOnZeroOf = function() {
			return a ? [a] : []
		};
		var a, o = t[e],
			r = i.model,
			s = r.get("axisLine.onZero"),
			l = r.get("axisLine.onZeroAxisIndex");
		if (s) {
			if (null != l) Im(o[l]) && (a = o[l]);
			else
				for (var u in o)
					if (o.hasOwnProperty(u) && Im(o[u]) && !n[h(o[u])]) {
						a = o[u];
						break
					}
			a && (n[h(a)] = !0)
		}

		function h(t) {
			return t.dim + "_" + t.index
		}
	}

	function Im(t) {
		return t && "category" !== t.type && "time" !== t.type && function(t) {
			var e = t.scale.getExtent(),
				i = e[0],
				n = e[1];
			return !(0 < i && 0 < n || i < 0 && n < 0)
		}(t)
	}
	Sm.type = "grid", Sm.axisPointerEnabled = !0, Sm.getRect = function() {
		return this._rect
	}, Sm.update = function(t, e) {
		var i = this._axesMap;
		this._updateScale(t, this.model), E(i.x, function(t) {
			zp(t.scale, t.model)
		}), E(i.y, function(t) {
			zp(t.scale, t.model)
		});
		var n = {};
		E(i.x, function(t) {
			Mm(i, "y", t, n)
		}), E(i.y, function(t) {
			Mm(i, "x", t, n)
		}), this.resize(this.model, e)
	}, Sm.resize = function(t, e, i) {
		var a = au(t.getBoxLayoutParams(), {
			width: e.getWidth(),
			height: e.getHeight()
		});
		this._rect = a;
		var n = this._axesList;

		function o() {
			E(n, function(t) {
				var e = t.isHorizontal(),
					i = e ? [0, a.width] : [0, a.height],
					n = t.inverse ? 1 : 0;
				t.setExtent(i[n], i[1 - n]),
					function(t, e) {
						var i = t.getExtent(),
							n = i[0] + i[1];
						t.toGlobalCoord = "x" === t.dim ? function(t) {
							return t + e
						} : function(t) {
							return n - t + e
						}, t.toLocalCoord = "x" === t.dim ? function(t) {
							return t - e
						} : function(t) {
							return n - t + e
						}
					}(t, e ? a.x : a.y)
			})
		}
		o(), !i && t.get("containLabel") && (E(n, function(t) {
			if (!t.model.get("axisLabel.inside")) {
				var e = function(t) {
					var e = t.model,
						i = t.scale;
					if (e.get("axisLabel.show") && !i.isBlank()) {
						var n, a, o = "category" === t.type,
							r = i.getExtent();
						a = o ? i.count() : (n = i.getTicks()).length;
						var s, l, u, h, c, d, f, p, g, m = t.getLabelModel(),
							v = Vp(t),
							y = 1;
						40 < a && (y = Math.ceil(a / 40));
						for (var x = 0; x < a; x += y) {
							var _ = v(n ? n[x] : r[0] + x),
								w = m.getTextRect(_),
								b = (l = w, u = m.get("rotate") || 0, void 0, h = u * Math.PI / 180, c = l.plain(), d = c.width, f = c.height,
									p = d * Math.cos(h) + f * Math.sin(h), g = d * Math.sin(h) + f * Math.cos(h), new bi(c.x, c.y, p, g));
							s ? s.union(b) : s = b
						}
						return s
					}
				}(t);
				if (e) {
					var i = t.isHorizontal() ? "height" : "width",
						n = t.model.get("axisLabel.margin");
					a[i] -= e[i] + n, "top" === t.position ? a.y += e.height + n : "left" === t.position && (a.x += e.width + n)
				}
			}
		}), o())
	}, Sm.getAxis = function(t, e) {
		var i = this._axesMap[t];
		if (null != i) {
			if (null == e)
				for (var n in i)
					if (i.hasOwnProperty(n)) return i[n];
			return i[e]
		}
	}, Sm.getAxes = function() {
		return this._axesList.slice()
	}, Sm.getCartesian = function(t, e) {
		if (null != t && null != e) {
			var i = "x" + t + "y" + e;
			return this._coordsMap[i]
		}
		z(t) && (e = t.yAxisIndex, t = t.xAxisIndex);
		for (var n = 0, a = this._coordsList; n < a.length; n++)
			if (a[n].getAxis("x").index === t || a[n].getAxis("y").index === e) return a[n]
	}, Sm.getCartesians = function() {
		return this._coordsList.slice()
	}, Sm.convertToPixel = function(t, e, i) {
		var n = this._findConvertTarget(t, e);
		return n.cartesian ? n.cartesian.dataToPoint(i) : n.axis ? n.axis.toGlobalCoord(n.axis.dataToCoord(i)) : null
	}, Sm.convertFromPixel = function(t, e, i) {
		var n = this._findConvertTarget(t, e);
		return n.cartesian ? n.cartesian.pointToData(i) : n.axis ? n.axis.coordToData(n.axis.toLocalCoord(i)) : null
	}, Sm._findConvertTarget = function(t, e) {
		var i, n, a = e.seriesModel,
			o = e.xAxisModel || a && a.getReferringComponents("xAxis")[0],
			r = e.yAxisModel || a && a.getReferringComponents("yAxis")[0],
			s = e.gridModel,
			l = this._coordsList;
		if (a) _(l, i = a.coordinateSystem) < 0 && (i = null);
		else if (o && r) i = this.getCartesian(o.componentIndex, r.componentIndex);
		else if (o) n = this.getAxis("x", o.componentIndex);
		else if (r) n = this.getAxis("y", r.componentIndex);
		else if (s) {
			s.coordinateSystem === this && (i = this._coordsList[0])
		}
		return {
			cartesian: i,
			axis: n
		}
	}, Sm.containPoint = function(t) {
		var e = this._coordsList[0];
		if (e) return e.containPoint(t)
	}, Sm._initCartesian = function(r, t, e) {
		var s = {
				left: !1,
				right: !1,
				top: !1,
				bottom: !1
			},
			l = {
				x: {},
				y: {}
			},
			u = {
				x: 0,
				y: 0
			};
		if (t.eachComponent("xAxis", i("x"), this), t.eachComponent("yAxis", i("y"), this), !u.x || !u.y) return this._axesMap = {},
			void(this._axesList = []);

		function i(o) {
			return function(t, e) {
				if (wm(t, r)) {
					var i = t.get("position");
					"x" === o ? "top" !== i && "bottom" !== i && (i = s.bottom ? "top" : "bottom") : "left" !== i && "right" !== i &&
						(i = s.left ? "right" : "left"), s[i] = !0;
					var n = new fm(o, Bp(t), [0, 0], t.get("type"), i),
						a = "category" === n.type;
					n.onBand = a && t.get("boundaryGap"), n.inverse = t.get("inverse"), (t.axis = n).model = t, n.grid = this, n.index =
						e, this._axesList.push(n), l[o][e] = n, u[o]++
				}
			}
		}
		E((this._axesMap = l).x, function(a, o) {
			E(l.y, function(t, e) {
				var i = "x" + o + "y" + e,
					n = new dm(i);
				n.grid = this, n.model = r, this._coordsMap[i] = n, this._coordsList.push(n), n.addAxis(a), n.addAxis(t)
			}, this)
		}, this)
	}, Sm._updateScale = function(l, u) {
		function h(e, i) {
			E(e.mapDimension(i.dim, !0), function(t) {
				i.scale.unionExtentFromData(e, Uf(e, t))
			})
		}
		E(this._axesList, function(t) {
			t.scale.setExtent(1 / 0, -1 / 0)
		}), l.eachSeries(function(t) {
			if (Dm(t)) {
				var e = Tm(t, l),
					i = e[0],
					n = e[1];
				if (!wm(i, u) || !wm(n, u)) return;
				var a = this.getCartesian(i.componentIndex, n.componentIndex),
					o = t.getData(),
					r = a.getAxis("x"),
					s = a.getAxis("y");
				"list" === o.type && (h(o, r, t), h(o, s, t))
			}
		}, this)
	}, Sm.getTooltipAxes = function(n) {
		var a = [],
			o = [];
		return E(this.getCartesians(), function(t) {
			var e = null != n && "auto" !== n ? t.getAxis(n) : t.getBaseAxis(),
				i = t.getOtherAxis(e);
			_(a, e) < 0 && a.push(e), _(o, i) < 0 && o.push(i)
		}), {
			baseAxes: a,
			otherAxes: o
		}
	};
	var Am = ["xAxis", "yAxis"];

	function Tm(e) {
		return N(Am, function(t) {
			return e.getReferringComponents(t)[0]
		})
	}

	function Dm(t) {
		return "cartesian2d" === t.get("coordinateSystem")
	}
	bm.create = function(n, a) {
		var o = [];
		return n.eachComponent("grid", function(t, e) {
			var i = new bm(t, n, a);
			i.name = "grid_" + e, i.resize(t, a, !0), t.coordinateSystem = i, o.push(i)
		}), n.eachSeries(function(t) {
			if (Dm(t)) {
				var e = Tm(t),
					i = e[0],
					n = e[1],
					a = i.getCoordSysModel().coordinateSystem;
				t.coordinateSystem = a.getCartesian(i.componentIndex, n.componentIndex)
			}
		}), o
	}, bm.dimensions = bm.prototype.dimensions = dm.prototype.dimensions, Hu.register("cartesian2d", bm);

	function Cm(t, e) {
		this.opt = e, this.axisModel = t, C(e, {
			labelOffset: 0,
			nameDirection: 1,
			tickDirection: 1,
			labelDirection: 1,
			silent: !0
		}), this.group = new Si;
		var i = new Si({
			position: e.position.slice(),
			rotation: e.rotation
		});
		i.updateTransform(), this._transform = i.transform, this._dumbGroup = i
	}
	var Lm = Math.PI;
	Cm.prototype = {
		constructor: Cm,
		hasBuilder: function(t) {
			return !!km[t]
		},
		add: function(t) {
			km[t].call(this)
		},
		getGroup: function() {
			return this.group
		}
	};
	var km = {
			axisLine: function() {
				var o = this.opt,
					t = this.axisModel;
				if (t.get("axisLine.show")) {
					var e = this.axisModel.axis.getExtent(),
						i = this._transform,
						r = [e[0], 0],
						n = [e[1], 0];
					i && (bt(r, r, i), bt(n, n, i));
					var s = L({
						lineCap: "round"
					}, t.getModel("axisLine.lineStyle").getLineStyle());
					this.group.add(new Ur({
						anid: "line",
						subPixelOptimize: !0,
						shape: {
							x1: r[0],
							y1: r[1],
							x2: n[0],
							y2: n[1]
						},
						style: s,
						strokeContainThreshold: o.strokeContainThreshold || 5,
						silent: !0,
						z2: 1
					}));
					var l = t.get("axisLine.symbol"),
						a = t.get("axisLine.symbolSize"),
						u = t.get("axisLine.symbolOffset") || 0;
					if ("number" == typeof u && (u = [u, u]), null != l) {
						"string" == typeof l && (l = [l, l]), "string" != typeof a && "number" != typeof a || (a = [a, a]);
						var h = a[0],
							c = a[1];
						E([{
							rotate: o.rotation + Math.PI / 2,
							offset: u[0],
							r: 0
						}, {
							rotate: o.rotation - Math.PI / 2,
							offset: u[1],
							r: Math.sqrt((r[0] - n[0]) * (r[0] - n[0]) + (r[1] - n[1]) * (r[1] - n[1]))
						}], function(t, e) {
							if ("none" !== l[e] && null != l[e]) {
								var i = Jp(l[e], -h / 2, -c / 2, h, c, s.stroke, !0),
									n = t.r + t.offset,
									a = [r[0] + n * Math.cos(o.rotation), r[1] - n * Math.sin(o.rotation)];
								i.attr({
									rotation: t.rotate,
									position: a,
									silent: !0,
									z2: 11
								}), this.group.add(i)
							}
						}, this)
					}
				}
			},
			axisTickLabel: function() {
				var t = this.axisModel,
					e = this.opt,
					i = function(t, e, i) {
						var n = e.axis;
						if (!e.get("axisTick.show") || n.scale.isBlank()) return;
						for (var a = e.getModel("axisTick"), o = a.getModel("lineStyle"), r = a.get("length"), s = n.getTicksCoords(),
								l = [], u = [], h = t._transform, c = [], d = 0; d < s.length; d++) {
							var f = s[d].coord;
							l[0] = f, l[1] = 0, u[0] = f, u[1] = i.tickDirection * r, h && (bt(l, l, h), bt(u, u, h));
							var p = new Ur({
								anid: "tick_" + s[d].tickValue,
								subPixelOptimize: !0,
								shape: {
									x1: l[0],
									y1: l[1],
									x2: u[0],
									y2: u[1]
								},
								style: C(o.getLineStyle(), {
									stroke: e.get("axisLine.lineStyle.color")
								}),
								z2: 2,
								silent: !0
							});
							t.group.add(p), c.push(p)
						}
						return c
					}(this, t, e);
				! function(t, e, i) {
					if (Wp(t.axis)) return;
					var n = t.get("axisLabel.showMinLabel"),
						a = t.get("axisLabel.showMaxLabel");
					i = i || [];
					var o = (e = e || [])[0],
						r = e[1],
						s = e[e.length - 1],
						l = e[e.length - 2],
						u = i[0],
						h = i[1],
						c = i[i.length - 1],
						d = i[i.length - 2];
					!1 === n ? (Em(o), Em(u)) : Rm(o, r) && (n ? (Em(r), Em(h)) : (Em(o), Em(u)));
					!1 === a ? (Em(s), Em(c)) : Rm(l, s) && (a ? (Em(l), Em(d)) : (Em(s), Em(c)))
				}(t, function(u, h, c) {
					var d = h.axis;
					if (!W(c.axisLabelShow, h.get("axisLabel.show")) || d.scale.isBlank()) return;
					var f = h.getModel("axisLabel"),
						p = f.get("margin"),
						t = d.getViewLabels(),
						e = (W(c.labelRotate, f.get("rotate")) || 0) * Lm / 180,
						g = Nm(c.rotation, e, c.labelDirection),
						m = h.getCategories && h.getCategories(!0),
						v = [],
						y = Om(h),
						x = h.get("triggerEvent");
					return E(t, function(t, e) {
						var i = t.tickValue,
							n = t.formattedLabel,
							a = t.rawLabel,
							o = f;
						m && m[i] && m[i].textStyle && (o = new dl(m[i].textStyle, f, h.ecModel));
						var r = o.getTextColor() || h.get("axisLine.lineStyle.color"),
							s = [d.dataToCoord(i), c.labelOffset + c.labelDirection * p],
							l = new Dr({
								anid: "label_" + i,
								position: s,
								rotation: g.rotation,
								silent: y,
								z2: 10
							});
						Gs(l.style, o, {
							text: n,
							textAlign: o.getShallow("align", !0) || g.textAlign,
							textVerticalAlign: o.getShallow("verticalAlign", !0) || o.getShallow("baseline", !0) || g.textVerticalAlign,
							textFill: "function" == typeof r ? r("category" === d.type ? a : "value" === d.type ? i + "" : i, e) : r
						}), x && (l.eventData = Pm(h), l.eventData.targetType = "axisLabel", l.eventData.value = a), u._dumbGroup.add(
							l), l.updateTransform(), v.push(l), u.group.add(l), l.decomposeTransform()
					}), v
				}(this, t, e), i)
			},
			axisName: function() {
				var t = this.opt,
					e = this.axisModel,
					i = W(t.axisName, e.get("name"));
				if (i) {
					var n, a, o = e.get("nameLocation"),
						r = t.nameDirection,
						s = e.getModel("nameTextStyle"),
						l = e.get("nameGap") || 0,
						u = this.axisModel.axis.getExtent(),
						h = u[0] > u[1] ? -1 : 1,
						c = ["start" === o ? u[0] - h * l : "end" === o ? u[1] + h * l : (u[0] + u[1]) / 2, zm(o) ? t.labelOffset + r *
							l : 0
						],
						d = e.get("nameRotate");
					null != d && (d = d * Lm / 180), zm(o) ? n = Nm(t.rotation, null != d ? d : t.rotation, r) : (n = function(t, e,
						i, n) {
						var a, o, r = Tl(i - t.rotation),
							s = n[0] > n[1],
							l = "start" === e && !s || "start" !== e && s;
						a = Dl(r - Lm / 2) ? (o = l ? "bottom" : "top", "center") : Dl(r - 1.5 * Lm) ? (o = l ? "top" : "bottom",
							"center") : (o = "middle", r < 1.5 * Lm && Lm / 2 < r ? l ? "left" : "right" : l ? "right" : "left");
						return {
							rotation: r,
							textAlign: a,
							textVerticalAlign: o
						}
					}(t, o, d || 0, u), null != (a = t.axisNameAvailableWidth) && (a = Math.abs(a / Math.sin(n.rotation)),
						isFinite(a) || (a = null)));
					var f = s.getFont(),
						p = e.get("nameTruncate", !0) || {},
						g = p.ellipsis,
						m = W(t.nameTruncateMaxWidth, p.maxWidth, a),
						v = null != g && null != m ? $l(i, m, f, g, {
							minChar: 2,
							placeholder: p.placeholder
						}) : i,
						y = e.get("tooltip", !0),
						x = e.mainType,
						_ = {
							componentType: x,
							name: i,
							$vars: ["name"]
						};
					_[x + "Index"] = e.componentIndex;
					var w = new Dr({
						anid: "name",
						__fullText: i,
						__truncatedText: v,
						position: c,
						rotation: n.rotation,
						silent: Om(e),
						z2: 1,
						tooltip: y && y.show ? L({
							content: i,
							formatter: function() {
								return i
							},
							formatterParams: _
						}, y) : null
					});
					Gs(w.style, s, {
							text: v,
							textFont: f,
							textFill: s.getTextColor() || e.get("axisLine.lineStyle.color"),
							textAlign: s.get("align") || n.textAlign,
							textVerticalAlign: s.get("verticalAlign") || n.textVerticalAlign
						}), e.get("triggerEvent") && (w.eventData = Pm(e), w.eventData.targetType = "axisName", w.eventData.name = i),
						this._dumbGroup.add(w), w.updateTransform(), this.group.add(w), w.decomposeTransform()
				}
			}
		},
		Pm = Cm.makeAxisEventDataBase = function(t) {
			var e = {
				componentType: t.mainType,
				componentIndex: t.componentIndex
			};
			return e[t.mainType + "Index"] = t.componentIndex, e
		},
		Nm = Cm.innerTextLayout = function(t, e, i) {
			var n, a = Tl(e - t);
			return {
				rotation: a,
				textAlign: Dl(a) ? (n = 0 < i ? "top" : "bottom", "center") : Dl(a - Lm) ? (n = 0 < i ? "bottom" : "top", "center") :
					(n = "middle", 0 < a && a < Lm ? 0 < i ? "right" : "left" : 0 < i ? "left" : "right"),
				textVerticalAlign: n
			}
		};
	var Om = Cm.isLabelSilent = function(t) {
		var e = t.get("tooltip");
		return t.get("silent") || !(t.get("triggerEvent") || e && e.show)
	};

	function Em(t) {
		t && (t.ignore = !0)
	}

	function Rm(t, e) {
		var i = t && t.getBoundingRect().clone(),
			n = e && e.getBoundingRect().clone();
		if (i && n) {
			var a = te([]);
			return ae(a, a, -t.rotation), i.applyTransform(ie([], a, t.getLocalTransform())), n.applyTransform(ie([], a, e.getLocalTransform())),
				i.intersect(n)
		}
	}

	function zm(t) {
		return "middle" === t || "center" === t
	}
	var Bm = E,
		Vm = A;

	function Gm(t, e) {
		var i = {
			axesInfo: {},
			seriesInvolved: !1,
			coordSysAxesInfo: {},
			coordSysMap: {}
		};
		return function(p, g, t) {
			var o = g.getComponent("tooltip"),
				m = g.getComponent("axisPointer"),
				v = m.get("link", !0) || [],
				y = [];
			Bm(t.getCoordinateSystems(), function(c) {
				if (c.axisPointerEnabled) {
					var t = Zm(c.model),
						d = p.coordSysAxesInfo[t] = {},
						f = (p.coordSysMap[t] = c).model.getModel("tooltip", o);
					if (Bm(c.getAxes(), Vm(a, !1, null)), c.getTooltipAxes && o && f.get("show")) {
						var e = "axis" === f.get("trigger"),
							i = "cross" === f.get("axisPointer.type"),
							n = c.getTooltipAxes(f.get("axisPointer.axis"));
						(e || i) && Bm(n.baseAxes, Vm(a, !i || "cross", e)), i && Bm(n.otherAxes, Vm(a, "cross", !1))
					}
				}

				function a(t, e, i) {
					var n = i.model.getModel("axisPointer", m),
						a = n.get("show");
					if (a && ("auto" !== a || t || Hm(n))) {
						null == e && (e = n.get("triggerTooltip"));
						var o = (n = t ? function(t, e, i, n, a, o) {
								var r = e.getModel("axisPointer"),
									s = {};
								Bm(["type", "snap", "lineStyle", "shadowStyle", "label", "animation", "animationDurationUpdate",
									"animationEasingUpdate", "z"
								], function(t) {
									s[t] = D(r.get(t))
								}), s.snap = "category" !== t.type && !!o, "cross" === r.get("type") && (s.type = "line");
								var l = s.label || (s.label = {});
								if (null == l.show && (l.show = !1), "cross" === a) {
									var u = r.get("label.show");
									if (l.show = null == u || u, !o) {
										var h = s.lineStyle = r.get("crossStyle");
										h && C(l, h.textStyle)
									}
								}
								return t.model.getModel("axisPointer", new dl(s, i, n))
							}(i, f, m, g, t, e) : n).get("snap"),
							r = Zm(i.model),
							s = e || o || "category" === i.type,
							l = p.axesInfo[r] = {
								key: r,
								axis: i,
								coordSys: c,
								axisPointerModel: n,
								triggerTooltip: e,
								involveSeries: s,
								snap: o,
								useHandle: Hm(n),
								seriesModels: []
							};
						d[r] = l, p.seriesInvolved |= s;
						var u = function(t, e) {
							for (var i = e.model, n = e.dim, a = 0; a < t.length; a++) {
								var o = t[a] || {};
								if (Fm(o[n + "AxisId"], i.id) || Fm(o[n + "AxisIndex"], i.componentIndex) || Fm(o[n + "AxisName"], i.name))
									return a
							}
						}(v, i);
						if (null != u) {
							var h = y[u] || (y[u] = {
								axesInfo: {}
							});
							h.axesInfo[r] = l, h.mapper = v[u].mapper, l.linkGroup = h
						}
					}
				}
			})
		}(i, t, e), i.seriesInvolved && function(a, t) {
			t.eachSeries(function(i) {
				var n = i.coordinateSystem,
					t = i.get("tooltip.trigger", !0),
					e = i.get("tooltip.show", !0);
				n && "none" !== t && !1 !== t && "item" !== t && !1 !== e && !1 !== i.get("axisPointer.show", !0) && Bm(a.coordSysAxesInfo[
					Zm(n.model)], function(t) {
					var e = t.axis;
					n.getAxis(e.dim) === e && (t.seriesModels.push(i), null == t.seriesDataCount && (t.seriesDataCount = 0), t.seriesDataCount +=
						i.getData().count())
				})
			}, this)
		}(i, t), i
	}

	function Fm(t, e) {
		return "all" === t || k(t) && 0 <= _(t, e) || t === e
	}

	function Wm(t) {
		var e = (t.ecModel.getComponent("axisPointer") || {}).coordSysAxesInfo;
		return e && e.axesInfo[Zm(t)]
	}

	function Hm(t) {
		return !!t.get("handle.show")
	}

	function Zm(t) {
		return t.type + "||" + t.id
	}
	var Um = lf({
		type: "axis",
		_axisPointer: null,
		axisPointerClass: null,
		render: function(t, e, i, n) {
			this.axisPointerClass && function(t) {
				var e = Wm(t);
				if (e) {
					var i = e.axisPointerModel,
						n = e.axis.scale,
						a = i.option,
						o = i.get("status"),
						r = i.get("value");
					null != r && (r = n.parse(r));
					var s = Hm(i);
					null == o && (a.status = s ? "show" : "hide");
					var l = n.getExtent().slice();
					l[0] > l[1] && l.reverse(), (null == r || r > l[1]) && (r = l[1]), r < l[0] && (r = l[0]), a.value = r, s &&
						(a.status = e.axis.scale.isBlank() ? "hide" : "show")
				}
			}(t), Um.superApply(this, "render", arguments), Xm(this, t, e, i, n, !0)
		},
		updateAxisPointer: function(t, e, i, n, a) {
			Xm(this, t, e, i, n, !1)
		},
		remove: function(t, e) {
			var i = this._axisPointer;
			i && i.remove(e), Um.superApply(this, "remove", arguments)
		},
		dispose: function(t, e) {
			Ym(this, e), Um.superApply(this, "dispose", arguments)
		}
	});

	function Xm(t, e, i, n, a, o) {
		var r = Um.getAxisPointerClass(t.axisPointerClass);
		if (r) {
			var s = function(t) {
				var e = Wm(t);
				return e && e.axisPointerModel
			}(e);
			s ? (t._axisPointer || (t._axisPointer = new r)).render(e, s, n, o) : Ym(t, n)
		}
	}

	function Ym(t, e, i) {
		var n = t._axisPointer;
		n && n.dispose(e, i), t._axisPointer = null
	}
	var jm = [];

	function qm(t, e, i) {
		i = i || {};
		var n = t.coordinateSystem,
			a = e.axis,
			o = {},
			r = a.getAxesOnZeroOf()[0],
			s = a.position,
			l = r ? "onZero" : s,
			u = a.dim,
			h = n.getRect(),
			c = [h.x, h.x + h.width, h.y, h.y + h.height],
			d = {
				left: 0,
				right: 1,
				top: 0,
				bottom: 1,
				onZero: 2
			},
			f = e.get("offset") || 0,
			p = "x" === u ? [c[2] - f, c[3] + f] : [c[0] - f, c[1] + f];
		if (r) {
			var g = r.toGlobalCoord(r.dataToCoord(0));
			p[d.onZero] = Math.max(Math.min(g, p[1]), p[0])
		}
		o.position = ["y" === u ? p[d[l]] : c[0], "x" === u ? p[d[l]] : c[3]], o.rotation = Math.PI / 2 * ("x" === u ? 0 : 1);
		o.labelDirection = o.tickDirection = o.nameDirection = {
				top: -1,
				bottom: 1,
				left: -1,
				right: 1
			} [s], o.labelOffset = r ? p[d[s]] - p[d.onZero] : 0, e.get("axisTick.inside") && (o.tickDirection = -o.tickDirection),
			W(i.labelInside, e.get("axisLabel.inside")) && (o.labelDirection = -o.labelDirection);
		var m = e.get("axisLabel.rotate");
		return o.labelRotate = "top" === l ? -m : m, o.z2 = 1, o
	}
	Um.registerAxisPointerClass = function(t, e) {
		jm[t] = e
	}, Um.getAxisPointerClass = function(t) {
		return t && jm[t]
	};
	var Km = ["axisLine", "axisTickLabel", "axisName"],
		$m = ["splitArea", "splitLine"],
		Jm = Um.extend({
			type: "cartesianAxis",
			axisPointerClass: "CartesianAxisPointer",
			render: function(e, t, i, n) {
				this.group.removeAll();
				var a = this._axisGroup;
				if (this._axisGroup = new Si, this.group.add(this._axisGroup), e.get("show")) {
					var o = e.getCoordSysModel(),
						r = qm(o, e),
						s = new Cm(e, r);
					E(Km, s.add, s), this._axisGroup.add(s.getGroup()), E($m, function(t) {
						e.get(t + ".show") && this["_" + t](e, o)
					}, this), Qs(a, this._axisGroup, e), Jm.superCall(this, "render", e, t, i, n)
				}
			},
			remove: function() {
				this._splitAreaColors = null
			},
			_splitLine: function(t, e) {
				var i = t.axis;
				if (!i.scale.isBlank()) {
					var n = t.getModel("splitLine"),
						a = n.getModel("lineStyle"),
						o = a.get("color");
					o = k(o) ? o : [o];
					for (var r = e.coordinateSystem.getRect(), s = i.isHorizontal(), l = 0, u = i.getTicksCoords({
							tickModel: n
						}), h = [], c = [], d = a.getLineStyle(), f = 0; f < u.length; f++) {
						var p = i.toGlobalCoord(u[f].coord);
						s ? (h[0] = p, h[1] = r.y, c[0] = p, c[1] = r.y + r.height) : (h[0] = r.x, h[1] = p, c[0] = r.x + r.width, c[1] =
							p);
						var g = l++ % o.length,
							m = u[f].tickValue;
						this._axisGroup.add(new Ur({
							anid: null != m ? "line_" + u[f].tickValue : null,
							subPixelOptimize: !0,
							shape: {
								x1: h[0],
								y1: h[1],
								x2: c[0],
								y2: c[1]
							},
							style: C({
								stroke: o[g]
							}, d),
							silent: !0
						}))
					}
				}
			},
			_splitArea: function(t, e) {
				var i = t.axis;
				if (!i.scale.isBlank()) {
					var n = t.getModel("splitArea"),
						a = n.getModel("areaStyle"),
						o = a.get("color"),
						r = e.coordinateSystem.getRect(),
						s = i.getTicksCoords({
							tickModel: n,
							clamp: !0
						});
					if (s.length) {
						var l = o.length,
							u = this._splitAreaColors,
							h = Q(),
							c = 0;
						if (u)
							for (var d = 0; d < s.length; d++) {
								var f = u.get(s[d].tickValue);
								if (null != f) {
									c = (f + (l - 1) * d) % l;
									break
								}
							}
						var p = i.toGlobalCoord(s[0].coord),
							g = a.getAreaStyle();
						o = k(o) ? o : [o];
						for (d = 1; d < s.length; d++) {
							var m, v, y, x, _ = i.toGlobalCoord(s[d].coord);
							p = i.isHorizontal() ? (m = p, v = r.y, y = _ - m, x = r.height, m + y) : (m = r.x, v = p, y = r.width, v + (
								x = _ - v));
							var w = s[d - 1].tickValue;
							null != w && h.set(w, c), this._axisGroup.add(new Hr({
								anid: null != w ? "area_" + w : null,
								shape: {
									x: m,
									y: v,
									width: y,
									height: x
								},
								style: C({
									fill: o[c]
								}, g),
								silent: !0
							})), c = (c + 1) % l
						}
						this._splitAreaColors = h
					}
				}
			}
		});
	Jm.extend({
		type: "xAxis"
	}), Jm.extend({
		type: "yAxis"
	}), lf({
		type: "grid",
		render: function(t, e) {
			this.group.removeAll(), t.get("show") && this.group.add(new Hr({
				shape: t.coordinateSystem.getRect(),
				style: C({
					fill: t.get("backgroundColor")
				}, t.getItemStyle()),
				silent: !0,
				z2: -1
			}))
		}
	}), Jd(function(t) {
		t.xAxis && t.yAxis && !t.grid && (t.grid = {})
	}), af(rm("line", "circle", "line")), nf(sm("line")), Qd(cd.PROCESSOR.STATISTIC, {
		seriesType: "line",
		modifyOutputEnd: !0,
		reset: function(t, e, i) {
			var n = t.getData(),
				a = t.get("sampling"),
				o = t.coordinateSystem;
			if ("cartesian2d" === o.type && a) {
				var r, s = o.getBaseAxis(),
					l = o.getOtherAxis(s),
					u = s.getExtent(),
					h = u[1] - u[0],
					c = Math.round(n.count() / h);
				1 < c && ("string" == typeof a ? r = um[a] : "function" == typeof a && (r = a), r && t.setData(n.downSample(n.mapDimension(
					l.dim), 1 / c, r, lm)))
			}
		}
	});
	var Qm = Wh.extend({
		type: "series.__base_bar__",
		getInitialData: function(t, e) {
			return Xf(this.getSource(), this)
		},
		getMarkerPosition: function(t) {
			var e = this.coordinateSystem;
			if (e) {
				var i = e.dataToPoint(e.clampData(t)),
					n = this.getData(),
					a = n.getLayout("offset"),
					o = n.getLayout("size");
				return i[e.getBaseAxis().isHorizontal() ? 0 : 1] += a + o / 2, i
			}
			return [NaN, NaN]
		},
		defaultOption: {
			zlevel: 0,
			z: 2,
			coordinateSystem: "cartesian2d",
			legendHoverLink: !0,
			barMinHeight: 0,
			barMinAngle: 0,
			large: !1,
			largeThreshold: 400,
			progressive: 3e3,
			progressiveChunkMode: "mod",
			itemStyle: {},
			emphasis: {}
		}
	});

	function tv(t, e, i, n, a, o) {
		Bs(t, e, i.getModel("label"), i.getModel("emphasis.label"), {
			labelFetcher: a,
			labelDataIndex: o,
			defaultText: bg(a.getData(), o),
			isRectText: !0,
			autoColor: n
		}), ev(t), ev(e)
	}

	function ev(t, e) {
		"outside" === t.textPosition && (t.textPosition = e)
	}
	Qm.extend({
		type: "series.bar",
		dependencies: ["grid", "polar"],
		brushSelector: "rect",
		getProgressive: function() {
			return !!this.get("large") && this.get("progressive")
		},
		getProgressiveThreshold: function() {
			var t = this.get("progressiveThreshold"),
				e = this.get("largeThreshold");
			return t < e && (t = e), t
		},
		defaultOption: {
			clip: !0,
			roundCap: !1
		}
	});
	var iv = Xa([
			["fill", "color"],
			["stroke", "borderColor"],
			["lineWidth", "borderWidth"],
			["stroke", "barBorderColor"],
			["lineWidth", "barBorderWidth"],
			["opacity"],
			["shadowBlur"],
			["shadowOffsetX"],
			["shadowOffsetY"],
			["shadowColor"]
		]),
		nv = {
			getBarItemStyle: function(t) {
				var e = iv(this, t);
				if (this.getBorderLineDash) {
					var i = this.getBorderLineDash();
					i && (e.lineDash = i)
				}
				return e
			}
		},
		av = ds({
			type: "sausage",
			shape: {
				cx: 0,
				cy: 0,
				r0: 0,
				r: 0,
				startAngle: 0,
				endAngle: 2 * Math.PI,
				clockwise: !0
			},
			buildPath: function(t, e) {
				var i = e.cx,
					n = e.cy,
					a = Math.max(e.r0 || 0, 0),
					o = Math.max(e.r, 0),
					r = .5 * (o - a),
					s = a + r,
					l = e.startAngle,
					u = e.endAngle,
					h = e.clockwise,
					c = Math.cos(l),
					d = Math.sin(l),
					f = Math.cos(u),
					p = Math.sin(u);
				(h ? u - l < 2 * Math.PI : l - u < 2 * Math.PI) && (t.moveTo(c * a + i, d * a + n), t.arc(c * s + i, d * s + n,
					r, -Math.PI + l, l, !h)), t.arc(i, n, o, l, u, !h), t.moveTo(f * o + i, p * o + n), t.arc(f * s + i, p * s + n,
					r, u - 2 * Math.PI, u - Math.PI, !h), 0 !== a && (t.arc(i, n, a, u, l, h), t.moveTo(c * a + i, p * a + n)), t.closePath()
			}
		}),
		ov = ["itemStyle", "barBorderWidth"],
		rv = [0, 0];
	L(dl.prototype, nv), hf({
		type: "bar",
		render: function(t, e, i) {
			this._updateDrawMode(t);
			var n = t.get("coordinateSystem");
			return "cartesian2d" !== n && "polar" !== n || (this._isLargeDraw ? this._renderLarge(t, e, i) : this._renderNormal(
				t, e, i)), this.group
		},
		incrementalPrepareRender: function(t, e, i) {
			this._clear(), this._updateDrawMode(t)
		},
		incrementalRender: function(t, e, i, n) {
			this._incrementalRenderLarge(t, e)
		},
		_updateDrawMode: function(t) {
			var e = t.pipelineContext.large;
			(null == this._isLargeDraw || e ^ this._isLargeDraw) && (this._isLargeDraw = e, this._clear())
		},
		_renderNormal: function(o, t, e) {
			var r, s = this.group,
				l = o.getData(),
				u = this._data,
				h = o.coordinateSystem,
				i = h.getBaseAxis();
			"cartesian2d" === h.type ? r = i.isHorizontal() : "polar" === h.type && (r = "angle" === i.dim);
			var c = o.isAnimationEnabled() ? o : null,
				d = o.get("clip", !0),
				f = function(t, e) {
					var i = t.getArea && t.getArea();
					if ("cartesian2d" === t.type) {
						var n = t.getBaseAxis();
						if ("category" !== n.type || !n.onBand) {
							var a = e.getLayout("bandWidth");
							n.isHorizontal() ? (i.x -= a, i.width += 2 * a) : (i.y -= a, i.height += 2 * a)
						}
					}
					return i
				}(h, l);
			s.removeClipPath();
			var p = o.get("roundCap", !0);
			l.diff(u).add(function(t) {
				if (l.hasValue(t)) {
					var e = l.getItemModel(t),
						i = fv[h.type](l, t, e);
					if (d)
						if (uv[h.type](f, i)) return void s.remove(n);
					var n = hv[h.type](t, i, r, c, !1, p);
					l.setItemGraphicEl(t, n), s.add(n), pv(n, l, t, e, i, o, r, "polar" === h.type)
				}
			}).update(function(t, e) {
				var i = u.getItemGraphicEl(e);
				if (l.hasValue(t)) {
					var n = l.getItemModel(t),
						a = fv[h.type](l, t, n);
					if (d)
						if (uv[h.type](f, a)) return void s.remove(i);
					i ? js(i, {
						shape: a
					}, c, t) : i = hv[h.type](t, a, r, c, !0, p), l.setItemGraphicEl(t, i), s.add(i), pv(i, l, t, n, a, o, r,
						"polar" === h.type)
				} else s.remove(i)
			}).remove(function(t) {
				var e = u.getItemGraphicEl(t);
				"cartesian2d" === h.type ? e && cv(t, c, e) : e && dv(t, c, e)
			}).execute(), this._data = l
		},
		_renderLarge: function(t, e, i) {
			this._clear(), mv(t, this.group);
			var n = t.get("clip", !0) ? tm(t.coordinateSystem, !1, t) : null;
			n ? this.group.setClipPath(n) : this.group.removeClipPath()
		},
		_incrementalRenderLarge: function(t, e) {
			mv(e, this.group, !0)
		},
		dispose: et,
		remove: function(t) {
			this._clear(t)
		},
		_clear: function(e) {
			var t = this.group,
				i = this._data;
			e && e.get("animation") && i && !this._isLargeDraw ? i.eachItemGraphicEl(function(t) {
				"sector" === t.type ? dv(t.dataIndex, e, t) : cv(t.dataIndex, e, t)
			}) : t.removeAll(), this._data = null
		}
	});
	var sv = Math.max,
		lv = Math.min,
		uv = {
			cartesian2d: function(t, e) {
				var i = e.width < 0 ? -1 : 1,
					n = e.height < 0 ? -1 : 1;
				i < 0 && (e.x += e.width, e.width = -e.width), n < 0 && (e.y += e.height, e.height = -e.height);
				var a = sv(e.x, t.x),
					o = lv(e.x + e.width, t.x + t.width),
					r = sv(e.y, t.y),
					s = lv(e.y + e.height, t.y + t.height);
				e.x = a, e.y = r, e.width = o - a, e.height = s - r;
				var l = e.width < 0 || e.height < 0;
				return i < 0 && (e.x += e.width, e.width = -e.width), n < 0 && (e.y += e.height, e.height = -e.height), l
			},
			polar: function(t) {
				return !1
			}
		},
		hv = {
			cartesian2d: function(t, e, i, n, a) {
				var o = new Hr({
					shape: L({}, e)
				});
				if (n) {
					var r = i ? "height" : "width",
						s = {};
					o.shape[r] = 0, s[r] = e[r], ol[a ? "updateProps" : "initProps"](o, {
						shape: s
					}, n, t)
				}
				return o
			},
			polar: function(t, e, i, n, a, o) {
				var r = e.startAngle < e.endAngle,
					s = new(!i && o ? av : Pr)({
						shape: C({
							clockwise: r
						}, e)
					});
				if (n) {
					var l = i ? "r" : "endAngle",
						u = {};
					s.shape[l] = i ? 0 : e.startAngle, u[l] = e[l], ol[a ? "updateProps" : "initProps"](s, {
						shape: u
					}, n, t)
				}
				return s
			}
		};

	function cv(t, e, i) {
		i.style.text = null, js(i, {
			shape: {
				width: 0
			}
		}, e, t, function() {
			i.parent && i.parent.remove(i)
		})
	}

	function dv(t, e, i) {
		i.style.text = null, js(i, {
			shape: {
				r: i.shape.r0
			}
		}, e, t, function() {
			i.parent && i.parent.remove(i)
		})
	}
	var fv = {
		cartesian2d: function(t, e, i) {
			var n = t.getItemLayout(e),
				a = function(t, e) {
					var i = t.get(ov) || 0;
					return Math.min(i, Math.abs(e.width), Math.abs(e.height))
				}(i, n),
				o = 0 < n.width ? 1 : -1,
				r = 0 < n.height ? 1 : -1;
			return {
				x: n.x + o * a / 2,
				y: n.y + r * a / 2,
				width: n.width - o * a,
				height: n.height - r * a
			}
		},
		polar: function(t, e, i) {
			var n = t.getItemLayout(e);
			return {
				cx: n.cx,
				cy: n.cy,
				r0: n.r0,
				r: n.r,
				startAngle: n.startAngle,
				endAngle: n.endAngle
			}
		}
	};

	function pv(t, e, i, n, a, o, r, s) {
		var l = e.getItemVisual(i, "color"),
			u = e.getItemVisual(i, "opacity"),
			h = n.getModel("itemStyle"),
			c = n.getModel("emphasis.itemStyle").getBarItemStyle();
		s || t.setShape("r", h.get("barBorderRadius") || 0), t.useStyle(C({
			fill: l,
			opacity: u
		}, h.getBarItemStyle()));
		var d = n.getShallow("cursor");
		d && t.attr("cursor", d);
		r ? a.height : a.width;
		s || tv(t.style, c, n, l, o, i), Os(t, c)
	}
	var gv = hr.extend({
		type: "largeBar",
		shape: {
			points: []
		},
		buildPath: function(t, e) {
			for (var i = e.points, n = this.__startPoint, a = this.__baseDimIdx, o = 0; o < i.length; o += 2) n[a] = i[o + a],
				t.moveTo(n[0], n[1]), t.lineTo(i[o], i[o + 1])
		}
	});

	function mv(t, e, i) {
		var n = t.getData(),
			a = [],
			o = n.getLayout("valueAxisHorizontal") ? 1 : 0;
		a[1 - o] = n.getLayout("valueAxisStart");
		var r = new gv({
			shape: {
				points: n.getLayout("largePoints")
			},
			incremental: !!i,
			__startPoint: a,
			__baseDimIdx: o,
			__largeDataIndices: n.getLayout("largeDataIndices"),
			__barWidth: n.getLayout("barWidth")
		});
		e.add(r),
			function(t, e, i) {
				var n = i.getVisual("borderColor") || i.getVisual("color"),
					a = e.getModel("itemStyle").getItemStyle(["color", "borderColor"]);
				t.useStyle(a), t.style.fill = null, t.style.stroke = n, t.style.lineWidth = i.getLayout("barWidth")
			}(r, t, n), r.seriesIndex = t.seriesIndex, t.get("silent") || (r.on("mousedown", vv), r.on("mousemove", vv))
	}
	var vv = cc(function(t) {
		var e = function(t, e, i) {
			var n = t.__baseDimIdx,
				a = 1 - n,
				o = t.shape.points,
				r = t.__largeDataIndices,
				s = Math.abs(t.__barWidth / 2),
				l = t.__startPoint[a];
			rv[0] = e, rv[1] = i;
			for (var u = rv[n], h = rv[1 - n], c = u - s, d = u + s, f = 0, p = o.length / 2; f < p; f++) {
				var g = 2 * f,
					m = o[g + n],
					v = o[g + a];
				if (c <= m && m <= d && (l <= v ? l <= h && h <= v : v <= h && h <= l)) return r[f]
			}
			return -1
		}(this, t.offsetX, t.offsetY);
		this.dataIndex = 0 <= e ? e : null
	}, 30, !1);
	nf(cd.VISUAL.LAYOUT, A(pp, "bar")), nf(cd.VISUAL.PROGRESSIVE_LAYOUT, gp), af({
		seriesType: "bar",
		reset: function(t) {
			t.getData().setVisual("legendSymbol", "roundRect")
		}
	});

	function yv(t, e, i) {
		e = k(e) && {
			coordDimensions: e
		} || L({}, e);
		var n = t.getSource(),
			a = Wf(n, e),
			o = new Tf(a, t);
		return o.initData(n, i), o
	}
	var xv = {
			updateSelectedMap: function(t) {
				this._targetList = k(t) ? t.slice() : [], this._selectTargetMap = S(t || [], function(t, e) {
					return t.set(e.name, e), t
				}, Q())
			},
			select: function(t, e) {
				var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
				"single" === this.get("selectedMode") && this._selectTargetMap.each(function(t) {
					t.selected = !1
				}), i && (i.selected = !0)
			},
			unSelect: function(t, e) {
				var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
				i && (i.selected = !1)
			},
			toggleSelected: function(t, e) {
				var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
				if (null != i) return this[i.selected ? "unSelect" : "select"](t, e), i.selected
			},
			isSelected: function(t, e) {
				var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
				return i && i.selected
			}
		},
		_v = uf({
			type: "series.pie",
			init: function(t) {
				_v.superApply(this, "init", arguments), this.legendDataProvider = function() {
					return this.getRawData()
				}, this.updateSelectedMap(this._createSelectableList()), this._defaultLabelLine(t)
			},
			mergeOption: function(t) {
				_v.superCall(this, "mergeOption", t), this.updateSelectedMap(this._createSelectableList())
			},
			getInitialData: function(t, e) {
				return yv(this, ["value"])
			},
			_createSelectableList: function() {
				for (var t = this.getRawData(), e = t.mapDimension("value"), i = [], n = 0, a = t.count(); n < a; n++) i.push({
					name: t.getName(n),
					value: t.get(e, n),
					selected: Ih(t, n, "selected")
				});
				return i
			},
			getDataParams: function(t) {
				var e = this.getData(),
					i = _v.superCall(this, "getDataParams", t),
					n = [];
				return e.each(e.mapDimension("value"), function(t) {
					n.push(t)
				}), i.percent = Il(n, t, e.hostModel.get("percentPrecision")), i.$vars.push("percent"), i
			},
			_defaultLabelLine: function(t) {
				ba(t, "labelLine", ["show"]);
				var e = t.labelLine,
					i = t.emphasis.labelLine;
				e.show = e.show && t.label.show, i.show = i.show && t.emphasis.label.show
			},
			defaultOption: {
				zlevel: 0,
				z: 2,
				legendHoverLink: !0,
				hoverAnimation: !0,
				center: ["50%", "50%"],
				radius: [0, "75%"],
				clockwise: !0,
				startAngle: 90,
				minAngle: 0,
				minShowLabelAngle: 0,
				selectedOffset: 10,
				hoverOffset: 10,
				avoidLabelOverlap: !0,
				percentPrecision: 2,
				stillShowZeroSum: !0,
				label: {
					rotate: !1,
					show: !0,
					position: "outer"
				},
				labelLine: {
					show: !0,
					length: 15,
					length2: 15,
					smooth: !1,
					lineStyle: {
						width: 1,
						type: "solid"
					}
				},
				itemStyle: {
					borderWidth: 1
				},
				animationType: "expansion",
				animationTypeUpdate: "transition",
				animationEasing: "cubicOut"
			}
		});

	function wv(t, e, i, n) {
		var a = e.getData(),
			o = this.dataIndex,
			r = a.getName(o),
			s = e.get("selectedOffset");
		n.dispatchAction({
			type: "pieToggleSelect",
			from: t,
			name: r,
			seriesId: e.id
		}), a.each(function(t) {
			bv(a.getItemGraphicEl(t), a.getItemLayout(t), e.isSelected(a.getName(t)), s, i)
		})
	}

	function bv(t, e, i, n, a) {
		var o = (e.startAngle + e.endAngle) / 2,
			r = i ? n : 0,
			s = [Math.cos(o) * r, Math.sin(o) * r];
		a ? t.animate().when(200, {
			position: s
		}).start("bounceOut") : t.attr("position", s)
	}

	function Sv(t, e) {
		Si.call(this);
		var i = new Pr({
				z2: 2
			}),
			n = new zr,
			a = new Dr;
		this.add(i), this.add(n), this.add(a), this.updateData(t, e, !0)
	}
	b(_v, xv);
	var Mv = Sv.prototype;
	Mv.updateData = function(t, e, i) {
		var n = this.childAt(0),
			a = this.childAt(1),
			o = this.childAt(2),
			r = t.hostModel,
			s = t.getItemModel(e),
			l = t.getItemLayout(e),
			u = L({}, l);
		u.label = null;
		var h = r.getShallow("animationTypeUpdate");
		i ? (n.setShape(u), "scale" === r.getShallow("animationType") ? (n.shape.r = l.r0, qs(n, {
			shape: {
				r: l.r
			}
		}, r, e)) : (n.shape.endAngle = l.startAngle, js(n, {
			shape: {
				endAngle: l.endAngle
			}
		}, r, e))) : "expansion" === h ? n.setShape(u) : js(n, {
			shape: u
		}, r, e);
		var c = t.getItemVisual(e, "color");
		n.useStyle(C({
			lineJoin: "bevel",
			fill: c
		}, s.getModel("itemStyle").getItemStyle())), n.hoverStyle = s.getModel("emphasis.itemStyle").getItemStyle();
		var d = s.getShallow("cursor");
		d && n.attr("cursor", d), bv(this, t.getItemLayout(e), r.isSelected(null, e), r.get("selectedOffset"), r.get(
			"animation"));
		var f = !i && "transition" === h;
		this._updateLabel(t, e, f), this.highDownOnUpdate = s.get("hoverAnimation") && r.isAnimationEnabled() ? function(t,
			e) {
			"emphasis" === e ? (a.ignore = a.hoverIgnore, o.ignore = o.hoverIgnore, n.stopAnimation(!0), n.animateTo({
				shape: {
					r: l.r + r.get("hoverOffset")
				}
			}, 300, "elasticOut")) : (a.ignore = a.normalIgnore, o.ignore = o.normalIgnore, n.stopAnimation(!0), n.animateTo({
				shape: {
					r: l.r
				}
			}, 300, "elasticOut"))
		} : null, Os(this)
	}, Mv._updateLabel = function(t, e, i) {
		var n = this.childAt(1),
			a = this.childAt(2),
			o = t.hostModel,
			r = t.getItemModel(e),
			s = t.getItemLayout(e).label,
			l = t.getItemVisual(e, "color");
		if (!s || isNaN(s.x) || isNaN(s.y)) a.ignore = a.normalIgnore = a.hoverIgnore = n.ignore = n.normalIgnore = n.hoverIgnore = !
			0;
		else {
			var u = {
					points: s.linePoints || [
						[s.x, s.y],
						[s.x, s.y],
						[s.x, s.y]
					]
				},
				h = {
					x: s.x,
					y: s.y
				};
			i ? (js(n, {
				shape: u
			}, o, e), js(a, {
				style: h
			}, o, e)) : (n.attr({
				shape: u
			}), a.attr({
				style: h
			})), a.attr({
				rotation: s.rotation,
				origin: [s.x, s.y],
				z2: 10
			});
			var c = r.getModel("label"),
				d = r.getModel("emphasis.label"),
				f = r.getModel("labelLine"),
				p = r.getModel("emphasis.labelLine");
			l = t.getItemVisual(e, "color");
			Bs(a.style, a.hoverStyle = {}, c, d, {
				labelFetcher: t.hostModel,
				labelDataIndex: e,
				defaultText: t.getName(e),
				autoColor: l,
				useInsideStyle: !!s.inside
			}, {
				textAlign: s.textAlign,
				textVerticalAlign: s.verticalAlign,
				opacity: t.getItemVisual(e, "opacity")
			}), a.ignore = a.normalIgnore = !c.get("show"), a.hoverIgnore = !d.get("show"), n.ignore = n.normalIgnore = !f.get(
				"show"), n.hoverIgnore = !p.get("show"), n.setStyle({
				stroke: l,
				opacity: t.getItemVisual(e, "opacity")
			}), n.setStyle(f.getModel("lineStyle").getLineStyle()), n.hoverStyle = p.getModel("lineStyle").getLineStyle();
			var g = f.get("smooth");
			g && !0 === g && (g = .4), n.setShape({
				smooth: g
			})
		}
	}, w(Sv, Si);

	function Iv(i, t) {
		E(t, function(o) {
			o.update = "updateView", tf(o, function(t, e) {
				var a = {};
				return e.eachComponent({
					mainType: "series",
					subType: i,
					query: t
				}, function(i) {
					i[o.method] && i[o.method](t.name, t.dataIndex);
					var n = i.getData();
					n.each(function(t) {
						var e = n.getName(t);
						a[e] = i.isSelected(e) || !1
					})
				}), {
					name: t.name,
					selected: a,
					seriesId: t.seriesId
				}
			})
		})
	}

	function Av(n) {
		return {
			getTargetSeries: function(t) {
				var e = {},
					i = Q();
				return t.eachSeriesByType(n, function(t) {
					t.__paletteScope = e, i.set(t.uid, t)
				}), i
			},
			reset: function(s, t) {
				var l = s.getRawData(),
					u = {},
					h = s.getData();
				h.each(function(t) {
					var e = h.getRawIndex(t);
					u[e] = t
				}), l.each(function(t) {
					var e, i = u[t],
						n = null != i && h.getItemVisual(i, "color", !0),
						a = null != i && h.getItemVisual(i, "borderColor", !0);
					if (n && a || (e = l.getItemModel(t)), n) l.setItemVisual(t, "color", n);
					else {
						var o = e.get("itemStyle.color") || s.getColorFromPalette(l.getName(t) || t + "", s.__paletteScope, l.count());
						l.setItemVisual(t, "color", o), null != i && h.setItemVisual(i, "color", o)
					}
					if (a) l.setItemVisual(t, "borderColor", a);
					else {
						var r = e.get("itemStyle.borderColor");
						l.setItemVisual(t, "borderColor", r), null != i && h.setItemVisual(i, "borderColor", r)
					}
				})
			}
		}
	}
	ec.extend({
		type: "pie",
		init: function() {
			var t = new Si;
			this._sectorGroup = t
		},
		render: function(t, e, i, n) {
			if (!n || n.from !== this.uid) {
				var a = t.getData(),
					o = this._data,
					r = this.group,
					s = e.get("animation"),
					l = !o,
					u = t.get("animationType"),
					h = t.get("animationTypeUpdate"),
					c = A(wv, this.uid, t, s, i),
					d = t.get("selectedMode");
				if (a.diff(o).add(function(t) {
						var e = new Sv(a, t);
						l && "scale" !== u && e.eachChild(function(t) {
							t.stopAnimation(!0)
						}), d && e.on("click", c), a.setItemGraphicEl(t, e), r.add(e)
					}).update(function(t, e) {
						var i = o.getItemGraphicEl(e);
						l || "transition" === h || i.eachChild(function(t) {
							t.stopAnimation(!0)
						}), i.updateData(a, t), i.off("click"), d && i.on("click", c), r.add(i), a.setItemGraphicEl(t, i)
					}).remove(function(t) {
						var e = o.getItemGraphicEl(t);
						r.remove(e)
					}).execute(), s && 0 < a.count() && (l ? "scale" !== u : "transition" !== h)) {
					for (var f = a.getItemLayout(0), p = 1; isNaN(f.startAngle) && p < a.count(); ++p) f = a.getItemLayout(p);
					var g = Math.max(i.getWidth(), i.getHeight()) / 2,
						m = T(r.removeClipPath, r);
					r.setClipPath(this._createClipPath(f.cx, f.cy, g, f.startAngle, f.clockwise, m, t, l))
				} else r.removeClipPath();
				this._data = a
			}
		},
		dispose: function() {},
		_createClipPath: function(t, e, i, n, a, o, r, s) {
			var l = new Pr({
				shape: {
					cx: t,
					cy: e,
					r0: 0,
					r: i,
					startAngle: n,
					endAngle: n,
					clockwise: a
				}
			});
			return (s ? qs : js)(l, {
				shape: {
					endAngle: n + (a ? 1 : -1) * Math.PI * 2
				}
			}, r, o), l
		},
		containPoint: function(t, e) {
			var i = e.getData().getItemLayout(0);
			if (i) {
				var n = t[0] - i.cx,
					a = t[1] - i.cy,
					o = Math.sqrt(n * n + a * a);
				return o <= i.r && o >= i.r0
			}
		}
	});
	var Tv = Math.PI / 180;

	function Dv(a, t, e, i, n, o, r) {
		function s(t, e, i) {
			for (var n = t; n < e; n++)
				if (a[n].y += i, t < n && n + 1 < e && a[n + 1].y > a[n].y + a[n].height) return void l(n, i / 2);
			l(e - 1, i / 2)
		}

		function l(t, e) {
			for (var i = t; 0 <= i && (a[i].y -= e, !(0 < i && a[i].y > a[i - 1].y + a[i - 1].height)); i--);
		}

		function u(t, e, i, n, a, o) {
			for (var r = e ? Number.MAX_VALUE : 0, s = 0, l = t.length; s < l; s++) {
				var u = Math.abs(t[s].y - n),
					h = t[s].len,
					c = t[s].len2,
					d = u < a + h ? Math.sqrt((a + h + c) * (a + h + c) - u * u) : Math.abs(t[s].x - i);
				e && r <= d && (d = r - 10), !e && d <= r && (d = r + 10), t[s].x = i + d * o, r = d
			}
		}
		a.sort(function(t, e) {
			return t.y - e.y
		});
		for (var h, c = 0, d = a.length, f = [], p = [], g = 0; g < d; g++)(h = a[g].y - c) < 0 && s(g, d, -h), c = a[g].y +
			a[g].height;
		r - c < 0 && l(d - 1, c - r);
		for (g = 0; g < d; g++) a[g].y >= e ? p.push(a[g]) : f.push(a[g]);
		u(f, !1, t, e, i, n), u(p, !0, t, e, i, n)
	}

	function Cv(t) {
		return "center" === t.position
	}

	function Lv(I, A, t, e, i) {
		var T, D, C = I.getData(),
			L = [],
			k = !1,
			P = (I.get("minShowLabelAngle") || 0) * Tv;
		C.each(function(t) {
			var e = C.getItemLayout(t),
				i = C.getItemModel(t),
				n = i.getModel("label"),
				a = n.get("position") || i.get("emphasis.label.position"),
				o = i.getModel("labelLine"),
				r = o.get("length"),
				s = o.get("length2");
			if (!(e.angle < P)) {
				var l, u, h, c, d = (e.startAngle + e.endAngle) / 2,
					f = Math.cos(d),
					p = Math.sin(d);
				T = e.cx, D = e.cy;
				var g = "inside" === a || "inner" === a;
				if ("center" === a) l = e.cx, u = e.cy, c = "center";
				else {
					var m = (g ? (e.r + e.r0) / 2 * f : e.r * f) + T,
						v = (g ? (e.r + e.r0) / 2 * p : e.r * p) + D;
					if (l = m + 3 * f, u = v + 3 * p, !g) {
						var y = m + f * (r + A - e.r),
							x = v + p * (r + A - e.r),
							_ = y + (f < 0 ? -1 : 1) * s;
						l = _ + (f < 0 ? -5 : 5), h = [
							[m, v],
							[y, x],
							[_, u = x]
						]
					}
					c = g ? "center" : 0 < f ? "left" : "right"
				}
				var w, b = n.getFont(),
					S = n.get("rotate");
				w = "number" == typeof S ? S * (Math.PI / 180) : S ? f < 0 ? -d + Math.PI : -d : 0;
				var M = un(I.getFormattedLabel(t, "normal") || C.getName(t), b, c, "top");
				k = !!w, e.label = {
					x: l,
					y: u,
					position: a,
					height: M.height,
					len: r,
					len2: s,
					linePoints: h,
					textAlign: c,
					verticalAlign: "middle",
					rotation: w,
					inside: g
				}, g || L.push(e.label)
			}
		}), !k && I.get("avoidLabelOverlap") && function(t, e, i, n, a, o) {
			for (var r = [], s = [], l = 0; l < t.length; l++) Cv(t[l]) || (t[l].x < e ? r.push(t[l]) : s.push(t[l]));
			for (Dv(s, e, i, n, 1, 0, o), Dv(r, e, i, n, -1, 0, o), l = 0; l < t.length; l++)
				if (!Cv(t[l])) {
					var u = t[l].linePoints;
					if (u) {
						var h = u[1][0] - u[2][0];
						t[l].x < e ? u[2][0] = t[l].x + 3 : u[2][0] = t[l].x - 3, u[1][1] = u[2][1] = t[l].y, u[1][0] = u[2][0] + h
					}
				}
		}(L, T, D, A, 0, e)
	}

	function kv(t) {
		return {
			seriesType: t,
			reset: function(t, e) {
				var n = e.findComponents({
					mainType: "legend"
				});
				if (n && n.length) {
					var a = t.getData();
					a.filterSelf(function(t) {
						for (var e = a.getName(t), i = 0; i < n.length; i++)
							if (!n[i].isSelected(e)) return !1;
						return !0
					})
				}
			}
		}
	}
	var Pv = 2 * Math.PI,
		Nv = Math.PI / 180;
	Iv("pie", [{
		type: "pieToggleSelect",
		event: "pieselectchanged",
		method: "toggleSelected"
	}, {
		type: "pieSelect",
		event: "pieselected",
		method: "select"
	}, {
		type: "pieUnSelect",
		event: "pieunselected",
		method: "unSelect"
	}]), af(Av("pie")), nf(A(function(t, e, A, i) {
		e.eachSeriesByType(t, function(t) {
			var a = t.getData(),
				e = a.mapDimension("value"),
				i = t.get("center"),
				n = t.get("radius");
			k(n) || (n = [0, n]), k(i) || (i = [i, i]);
			var o = A.getWidth(),
				r = A.getHeight(),
				s = Math.min(o, r),
				l = xl(i[0], o),
				u = xl(i[1], r),
				h = xl(n[0], s / 2),
				c = xl(n[1], s / 2),
				d = -t.get("startAngle") * Nv,
				f = t.get("minAngle") * Nv,
				p = 0;
			a.each(e, function(t) {
				isNaN(t) || p++
			});
			var g = a.getSum(e),
				m = Math.PI / (g || p) * 2,
				v = t.get("clockwise"),
				y = t.get("roseType"),
				x = t.get("stillShowZeroSum"),
				_ = a.getDataExtent(e);
			_[0] = 0;
			var w = Pv,
				b = 0,
				S = d,
				M = v ? 1 : -1;
			if (a.each(e, function(t, e) {
					var i;
					if (isNaN(t)) a.setItemLayout(e, {
						angle: NaN,
						startAngle: NaN,
						endAngle: NaN,
						clockwise: v,
						cx: l,
						cy: u,
						r0: h,
						r: y ? NaN : c
					});
					else {
						(i = "area" !== y ? 0 === g && x ? m : t * m : Pv / p) < f ? w -= i = f : b += t;
						var n = S + M * i;
						a.setItemLayout(e, {
							angle: i,
							startAngle: S,
							endAngle: n,
							clockwise: v,
							cx: l,
							cy: u,
							r0: h,
							r: y ? yl(t, _, [h, c]) : c
						}), S = n
					}
				}), w < Pv && p)
				if (w <= .001) {
					var I = Pv / p;
					a.each(e, function(t, e) {
						if (!isNaN(t)) {
							var i = a.getItemLayout(e);
							i.angle = I, i.startAngle = d + M * e * I, i.endAngle = d + M * (e + 1) * I
						}
					})
				} else m = w / b, S = d, a.each(e, function(t, e) {
					if (!isNaN(t)) {
						var i = a.getItemLayout(e),
							n = i.angle === f ? f : t * m;
						i.startAngle = S, i.endAngle = S + M * n, S += M * n
					}
				});
			Lv(t, c, 0, r)
		})
	}, "pie")), Qd(kv("pie")), Wh.extend({
		type: "series.scatter",
		dependencies: ["grid", "polar", "geo", "singleAxis", "calendar"],
		getInitialData: function(t, e) {
			return Xf(this.getSource(), this)
		},
		brushSelector: "point",
		getProgressive: function() {
			var t = this.option.progressive;
			return null == t ? this.option.large ? 5e3 : this.get("progressive") : t
		},
		getProgressiveThreshold: function() {
			var t = this.option.progressiveThreshold;
			return null == t ? this.option.large ? 1e4 : this.get("progressiveThreshold") : t
		},
		defaultOption: {
			coordinateSystem: "cartesian2d",
			zlevel: 0,
			z: 2,
			legendHoverLink: !0,
			hoverAnimation: !0,
			symbolSize: 10,
			large: !1,
			largeThreshold: 2e3,
			itemStyle: {
				opacity: .8
			},
			clip: !0
		}
	});
	var Ov = ds({
		shape: {
			points: null
		},
		symbolProxy: null,
		softClipShape: null,
		buildPath: function(t, e) {
			var i = e.points,
				n = e.size,
				a = this.symbolProxy,
				o = a.shape;
			if (!((t.getContext ? t.getContext() : t) && n[0] < 4))
				for (var r = 0; r < i.length;) {
					var s = i[r++],
						l = i[r++];
					isNaN(s) || isNaN(l) || this.softClipShape && !this.softClipShape.contain(s, l) || (o.x = s - n[0] / 2, o.y =
						l - n[1] / 2, o.width = n[0], o.height = n[1], a.buildPath(t, o, !0))
				}
		},
		afterBrush: function(t) {
			var e = this.shape,
				i = e.points,
				n = e.size;
			if (n[0] < 4) {
				this.setTransform(t);
				for (var a = 0; a < i.length;) {
					var o = i[a++],
						r = i[a++];
					isNaN(o) || isNaN(r) || this.softClipShape && !this.softClipShape.contain(o, r) || t.fillRect(o - n[0] / 2, r -
						n[1] / 2, n[0], n[1])
				}
				this.restoreTransform(t)
			}
		},
		findDataIndex: function(t, e) {
			for (var i = this.shape, n = i.points, a = i.size, o = Math.max(a[0], 4), r = Math.max(a[1], 4), s = n.length /
					2 - 1; 0 <= s; s--) {
				var l = 2 * s,
					u = n[l] - o / 2,
					h = n[1 + l] - r / 2;
				if (u <= t && h <= e && t <= u + o && e <= h + r) return s
			}
			return -1
		}
	});

	function Ev() {
		this.group = new Si
	}
	var Rv = Ev.prototype;

	function zv(t, e, i) {
		vg.call(this, t, e, i), this.type = "value", this.angle = 0, this.name = "", this.model
	}

	function Bv(t, e, i) {
		this._model = t, this.dimensions = [], this._indicatorAxes = N(t.getIndicatorModels(), function(t, e) {
			var i = "indicator_" + e,
				n = new zv(i, "log" === t.get("axisType") ? new Op : new op);
			return n.name = t.get("name"), (n.model = t).axis = n, this.dimensions.push(i), n
		}, this), this.resize(t, i), this.cx, this.cy, this.r, this.r0, this.startAngle
	}
	Rv.isPersistent = function() {
		return !this._incremental
	}, Rv.updateData = function(t, e) {
		this.group.removeAll();
		var i = new Ov({
			rectHover: !0,
			cursor: "default"
		});
		i.setShape({
			points: t.getLayout("symbolPoints")
		}), this._setCommon(i, t, !1, e), this.group.add(i), this._incremental = null
	}, Rv.updateLayout = function(t) {
		if (!this._incremental) {
			var n = t.getLayout("symbolPoints");
			this.group.eachChild(function(t) {
				if (null != t.startIndex) {
					var e = 2 * (t.endIndex - t.startIndex),
						i = 4 * t.startIndex * 2;
					n = new Float32Array(n.buffer, i, e)
				}
				t.setShape("points", n)
			})
		}
	}, Rv.incrementalPrepareUpdate = function(t) {
		this.group.removeAll(), this._clearIncremental(), 2e6 < t.count() ? (this._incremental || (this._incremental = new ts({
			silent: !0
		})), this.group.add(this._incremental)) : this._incremental = null
	}, Rv.incrementalUpdate = function(t, e, i) {
		var n;
		this._incremental ? (n = new Ov, this._incremental.addDisplayable(n, !0)) : ((n = new Ov({
			rectHover: !0,
			cursor: "default",
			startIndex: t.start,
			endIndex: t.end
		})).incremental = !0, this.group.add(n)), n.setShape({
			points: e.getLayout("symbolPoints")
		}), this._setCommon(n, e, !!this._incremental, i)
	}, Rv._setCommon = function(i, t, e, n) {
		var a = t.hostModel;
		n = n || {};
		var o = t.getVisual("symbolSize");
		i.setShape("size", o instanceof Array ? o : [o, o]), i.softClipShape = n.clipShape || null, i.symbolProxy = Jp(t.getVisual(
			"symbol"), 0, 0, 0, 0), i.setColor = i.symbolProxy.setColor;
		var r = i.shape.size[0] < 4;
		i.useStyle(a.getModel("itemStyle").getItemStyle(r ? ["color", "shadowBlur", "shadowColor"] : ["color"]));
		var s = t.getVisual("color");
		s && i.setColor(s), e || (i.seriesIndex = a.seriesIndex, i.on("mousemove", function(t) {
			i.dataIndex = null;
			var e = i.findDataIndex(t.offsetX, t.offsetY);
			0 <= e && (i.dataIndex = e + (i.startIndex || 0))
		}))
	}, Rv.remove = function() {
		this._clearIncremental(), this._incremental = null, this.group.removeAll()
	}, Rv._clearIncremental = function() {
		var t = this._incremental;
		t && t.clearDisplaybles()
	}, hf({
		type: "scatter",
		render: function(t, e, i) {
			var n = t.getData();
			this._updateSymbolDraw(n, t).updateData(n, {
				clipShape: this._getClipShape(t)
			}), this._finished = !0
		},
		incrementalPrepareRender: function(t, e, i) {
			var n = t.getData();
			this._updateSymbolDraw(n, t).incrementalPrepareUpdate(n), this._finished = !1
		},
		incrementalRender: function(t, e, i) {
			this._symbolDraw.incrementalUpdate(t, e.getData(), {
				clipShape: this._getClipShape(e)
			}), this._finished = t.end === e.getData().count()
		},
		updateTransform: function(t, e, i) {
			var n = t.getData();
			if (this.group.dirty(), !this._finished || 1e4 < n.count() || !this._symbolDraw.isPersistent()) return {
				update: !0
			};
			var a = sm().reset(t);
			a.progress && a.progress({
				start: 0,
				end: n.count()
			}, n), this._symbolDraw.updateLayout(n)
		},
		_getClipShape: function(t) {
			var e = t.coordinateSystem,
				i = e && e.getArea && e.getArea();
			return t.get("clip", !0) ? i : null
		},
		_updateSymbolDraw: function(t, e) {
			var i = this._symbolDraw,
				n = e.pipelineContext.large;
			return i && n === this._isLargeDraw || (i && i.remove(), i = this._symbolDraw = n ? new Ev : new Ng, this._isLargeDraw =
				n, this.group.removeAll()), this.group.add(i.group), i
		},
		remove: function(t, e) {
			this._symbolDraw && this._symbolDraw.remove(!0), this._symbolDraw = null
		},
		dispose: function() {}
	}), af(rm("scatter", "circle")), nf(sm("scatter")), w(zv, vg), Bv.prototype.getIndicatorAxes = function() {
		return this._indicatorAxes
	}, Bv.prototype.dataToPoint = function(t, e) {
		var i = this._indicatorAxes[e];
		return this.coordToPoint(i.dataToCoord(t), e)
	}, Bv.prototype.coordToPoint = function(t, e) {
		var i = this._indicatorAxes[e].angle;
		return [this.cx + t * Math.cos(i), this.cy - t * Math.sin(i)]
	}, Bv.prototype.pointToData = function(t) {
		var e = t[0] - this.cx,
			i = t[1] - this.cy,
			n = Math.sqrt(e * e + i * i);
		e /= n, i /= n;
		for (var a, o = Math.atan2(-i, e), r = 1 / 0, s = -1, l = 0; l < this._indicatorAxes.length; l++) {
			var u = this._indicatorAxes[l],
				h = Math.abs(o - u.angle);
			h < r && (a = u, s = l, r = h)
		}
		return [s, +(a && a.coordToData(n))]
	}, Bv.prototype.resize = function(t, e) {
		var i = t.get("center"),
			n = e.getWidth(),
			a = e.getHeight(),
			o = Math.min(n, a) / 2;
		this.cx = xl(i[0], n), this.cy = xl(i[1], a), this.startAngle = t.get("startAngle") * Math.PI / 180;
		var r = t.get("radius");
		"string" != typeof r && "number" != typeof r || (r = [0, r]), this.r0 = xl(r[0], o), this.r = xl(r[1], o), E(this._indicatorAxes,
			function(t, e) {
				t.setExtent(this.r0, this.r);
				var i = this.startAngle + e * Math.PI * 2 / this._indicatorAxes.length;
				i = Math.atan2(Math.sin(i), Math.cos(i)), t.angle = i
			}, this)
	}, Bv.prototype.update = function(n, t) {
		var a = this._indicatorAxes,
			o = this._model;
		E(a, function(t) {
			t.scale.setExtent(1 / 0, -1 / 0)
		}), n.eachSeriesByType("radar", function(t, e) {
			if ("radar" === t.get("coordinateSystem") && n.getComponent("radar", t.get("radarIndex")) === o) {
				var i = t.getData();
				E(a, function(t) {
					t.scale.unionExtentFromData(i, i.mapDimension(t.dim))
				})
			}
		}, this);
		var f = o.get("splitNumber");

		function p(t) {
			var e = Math.pow(10, Math.floor(Math.log(t) / Math.LN10)),
				i = t / e;
			return 2 === i ? i = 5 : i *= 2, i * e
		}
		E(a, function(t, e) {
			var i = Rp(t.scale, t.model);
			zp(t.scale, t.model);
			var n = t.model,
				a = t.scale,
				o = n.getMin(),
				r = n.getMax(),
				s = a.getInterval();
			if (null != o && null != r) a.setExtent(+o, +r), a.setInterval((r - o) / f);
			else if (null != o)
				for (var l; l = o + s * f, a.setExtent(+o, l), a.setInterval(s), s = p(s), l < i[1] && isFinite(l) && isFinite(
						i[1]););
			else if (null != r)
				for (var u; u = r - s * f, a.setExtent(u, +r), a.setInterval(s), s = p(s), u > i[0] && isFinite(u) && isFinite(
						i[0]););
			else {
				var h = a.getTicks().length - 1;
				f < h && (s = p(s));
				var c = Math.round((i[0] + i[1]) / 2 / s) * s,
					d = Math.round(f / 2);
				a.setExtent(_l(c - d * s), _l(c + (f - d) * s)), a.setInterval(s)
			}
		})
	}, Bv.dimensions = [], Bv.create = function(i, n) {
		var a = [];
		return i.eachComponent("radar", function(t) {
			var e = new Bv(t, i, n);
			a.push(e), t.coordinateSystem = e
		}), i.eachSeriesByType("radar", function(t) {
			"radar" === t.get("coordinateSystem") && (t.coordinateSystem = a[t.get("radarIndex") || 0])
		}), a
	}, Hu.register("radar", Bv);
	var Vv = gm.valueAxis;

	function Gv(t, e) {
		return C({
			show: e
		}, t)
	}
	sf({
		type: "radar",
		optionUpdated: function() {
			var a = this.get("boundaryGap"),
				o = this.get("splitNumber"),
				r = this.get("scale"),
				s = this.get("axisLine"),
				l = this.get("axisTick"),
				u = this.get("axisType"),
				h = this.get("axisLabel"),
				c = this.get("name"),
				d = this.get("name.show"),
				f = this.get("name.formatter"),
				p = this.get("nameGap"),
				g = this.get("triggerEvent"),
				t = N(this.get("indicator") || [], function(t) {
					null != t.max && 0 < t.max && !t.min ? t.min = 0 : null != t.min && t.min < 0 && !t.max && (t.max = 0);
					var e = c;
					if (null != t.color && (e = C({
							color: t.color
						}, c)), t = m(D(t), {
							boundaryGap: a,
							splitNumber: o,
							scale: r,
							axisLine: s,
							axisTick: l,
							axisType: u,
							axisLabel: h,
							name: t.text,
							nameLocation: "end",
							nameGap: p,
							nameTextStyle: e,
							triggerEvent: g
						}, !1), d || (t.name = ""), "string" == typeof f) {
						var i = t.name;
						t.name = f.replace("{value}", null != i ? i : "")
					} else "function" == typeof f && (t.name = f(t.name, t));
					var n = L(new dl(t, null, this.ecModel), Hp);
					return n.mainType = "radar", n.componentIndex = this.componentIndex, n
				}, this);
			this.getIndicatorModels = function() {
				return t
			}
		},
		defaultOption: {
			zlevel: 0,
			z: 0,
			center: ["50%", "50%"],
			radius: "75%",
			startAngle: 90,
			name: {
				show: !0
			},
			boundaryGap: [0, 0],
			splitNumber: 5,
			nameGap: 15,
			scale: !1,
			shape: "polygon",
			axisLine: m({
				lineStyle: {
					color: "#bbb"
				}
			}, Vv.axisLine),
			axisLabel: Gv(Vv.axisLabel, !1),
			axisTick: Gv(Vv.axisTick, !1),
			axisType: "interval",
			splitLine: Gv(Vv.splitLine, !0),
			splitArea: Gv(Vv.splitArea, !0),
			indicator: []
		}
	});
	var Fv = ["axisLine", "axisTickLabel", "axisName"];
	lf({
		type: "radar",
		render: function(t, e, i) {
			this.group.removeAll(), this._buildAxes(t), this._buildSplitLineAndArea(t)
		},
		_buildAxes: function(t) {
			var e = t.coordinateSystem;
			E(N(e.getIndicatorAxes(), function(t) {
				return new Cm(t.model, {
					position: [e.cx, e.cy],
					rotation: t.angle,
					labelDirection: -1,
					tickDirection: -1,
					nameDirection: 1
				})
			}), function(t) {
				E(Fv, t.add, t), this.group.add(t.getGroup())
			}, this)
		},
		_buildSplitLineAndArea: function(t) {
			var n = t.coordinateSystem,
				e = n.getIndicatorAxes();
			if (e.length) {
				var i = t.get("shape"),
					a = t.getModel("splitLine"),
					o = t.getModel("splitArea"),
					r = a.getModel("lineStyle"),
					s = o.getModel("areaStyle"),
					l = a.get("show"),
					u = o.get("show"),
					h = r.get("color"),
					c = s.get("color");
				h = k(h) ? h : [h], c = k(c) ? c : [c];
				var d = [],
					f = [];
				if ("circle" === i)
					for (var p = e[0].getTicksCoords(), g = n.cx, m = n.cy, v = 0; v < p.length; v++) {
						if (l) d[I(d, h, v)].push(new Lr({
							shape: {
								cx: g,
								cy: m,
								r: p[v].coord
							}
						}));
						if (u && v < p.length - 1) f[I(f, c, v)].push(new Nr({
							shape: {
								cx: g,
								cy: m,
								r0: p[v].coord,
								r: p[v + 1].coord
							}
						}))
					} else {
						var y, x = N(e, function(t, e) {
								var i = t.getTicksCoords();
								return y = null == y ? i.length - 1 : Math.min(i.length - 1, y), N(i, function(t) {
									return n.coordToPoint(t.coord, e)
								})
							}),
							_ = [];
						for (v = 0; v <= y; v++) {
							for (var w = [], b = 0; b < e.length; b++) w.push(x[b][v]);
							if (w[0] && w.push(w[0].slice()), l) d[I(d, h, v)].push(new zr({
								shape: {
									points: w
								}
							}));
							if (u && _) f[I(f, c, v - 1)].push(new Rr({
								shape: {
									points: w.concat(_)
								}
							}));
							_ = w.slice().reverse()
						}
					}
				var S = r.getLineStyle(),
					M = s.getAreaStyle();
				E(f, function(t, e) {
					this.group.add(ys(t, {
						style: C({
							stroke: "none",
							fill: c[e % c.length]
						}, M),
						silent: !0
					}))
				}, this), E(d, function(t, e) {
					this.group.add(ys(t, {
						style: C({
							fill: "none",
							stroke: h[e % h.length]
						}, S),
						silent: !0
					}))
				}, this)
			}

			function I(t, e, i) {
				var n = i % e.length;
				return t[n] = t[n] || [], n
			}
		}
	});
	var Wv = Wh.extend({
		type: "series.radar",
		dependencies: ["radar"],
		init: function(t) {
			Wv.superApply(this, "init", arguments), this.legendDataProvider = function() {
				return this.getRawData()
			}
		},
		getInitialData: function(t, e) {
			return yv(this, {
				generateCoord: "indicator_",
				generateCoordCount: 1 / 0
			})
		},
		formatTooltip: function(n) {
			var a = this.getData(),
				t = this.coordinateSystem.getIndicatorAxes(),
				e = this.getData().getName(n);
			return Wl("" === e ? this.name : e) + "<br/>" + N(t, function(t, e) {
				var i = a.get(a.mapDimension(t.dim), n);
				return Wl(t.name + " : " + i)
			}).join("<br />")
		},
		defaultOption: {
			zlevel: 0,
			z: 2,
			coordinateSystem: "radar",
			legendHoverLink: !0,
			radarIndex: 0,
			lineStyle: {
				width: 2,
				type: "solid"
			},
			label: {
				position: "top"
			},
			symbol: "emptyCircle",
			symbolSize: 4
		}
	});
	hf({
		type: "radar",
		render: function(l, t, e) {
			var i = l.coordinateSystem,
				g = this.group,
				m = l.getData(),
				s = this._data;

			function u(t, e) {
				var i = t.getItemVisual(e, "symbol") || "circle",
					n = t.getItemVisual(e, "color");
				if ("none" !== i) {
					var a = function(t) {
							return k(t) || (t = [+t, +t]), t
						}(t.getItemVisual(e, "symbolSize")),
						o = Jp(i, -1, -1, 2, 2, n);
					return o.attr({
						style: {
							strokeNoScale: !0
						},
						z2: 100,
						scale: [a[0] / 2, a[1] / 2]
					}), o
				}
			}

			function h(t, e, i, n, a, o) {
				i.removeAll();
				for (var r = 0; r < e.length - 1; r++) {
					var s = u(n, a);
					s && (t[s.__dimIdx = r] ? (s.attr("position", t[r]), ol[o ? "initProps" : "updateProps"](s, {
						position: e[r]
					}, l, a)) : s.attr("position", e[r]), i.add(s))
				}
			}

			function c(t) {
				return N(t, function(t) {
					return [i.cx, i.cy]
				})
			}
			m.diff(s).add(function(t) {
				var e = m.getItemLayout(t);
				if (e) {
					var i = new Rr,
						n = new zr,
						a = {
							shape: {
								points: e
							}
						};
					i.shape.points = c(e), n.shape.points = c(e), qs(i, a, l, t), qs(n, a, l, t);
					var o = new Si,
						r = new Si;
					o.add(n), o.add(i), o.add(r), h(n.shape.points, e, r, m, t, !0), m.setItemGraphicEl(t, o)
				}
			}).update(function(t, e) {
				var i = s.getItemGraphicEl(e),
					n = i.childAt(0),
					a = i.childAt(1),
					o = i.childAt(2),
					r = {
						shape: {
							points: m.getItemLayout(t)
						}
					};
				r.shape.points && (h(n.shape.points, r.shape.points, o, m, t, !1), js(n, r, l), js(a, r, l), m.setItemGraphicEl(
					t, i))
			}).remove(function(t) {
				g.remove(s.getItemGraphicEl(t))
			}).execute(), m.eachItemGraphicEl(function(t, i) {
				var e = m.getItemModel(i),
					n = t.childAt(0),
					a = t.childAt(1),
					o = t.childAt(2),
					r = m.getItemVisual(i, "color");
				g.add(t), n.useStyle(C(e.getModel("lineStyle").getLineStyle(), {
					fill: "none",
					stroke: r
				})), n.hoverStyle = e.getModel("emphasis.lineStyle").getLineStyle();
				var s = e.getModel("areaStyle"),
					l = e.getModel("emphasis.areaStyle"),
					u = s.isEmpty() && s.parentModel.isEmpty(),
					h = l.isEmpty() && l.parentModel.isEmpty();
				h = h && u, a.ignore = u, a.useStyle(C(s.getAreaStyle(), {
					fill: r,
					opacity: .7
				})), a.hoverStyle = l.getAreaStyle();
				var c = e.getModel("itemStyle").getItemStyle(["color"]),
					d = e.getModel("emphasis.itemStyle").getItemStyle(),
					f = e.getModel("label"),
					p = e.getModel("emphasis.label");
				o.eachChild(function(t) {
					t.setStyle(c), t.hoverStyle = D(d);
					var e = m.get(m.dimensions[t.__dimIdx], i);
					null != e && !isNaN(e) || (e = ""), Bs(t.style, t.hoverStyle, f, p, {
						labelFetcher: m.hostModel,
						labelDataIndex: i,
						labelDimIndex: t.__dimIdx,
						defaultText: e,
						autoColor: r,
						isRectText: !0
					})
				}), t.highDownOnUpdate = function(t, e) {
					a.attr("ignore", "emphasis" === e ? h : u)
				}, Os(t)
			}), this._data = m
		},
		remove: function() {
			this.group.removeAll(), this._data = null
		},
		dispose: function() {}
	});

	function Hv(t) {
		return !isNaN(t[0]) && !isNaN(t[1])
	}

	function Zv(t) {
		return [t.cx, t.cy]
	}
	af(Av("radar")), af(rm("radar", "circle")), nf(function(t) {
		t.eachSeriesByType("radar", function(t) {
			var i = t.getData(),
				a = [],
				o = t.coordinateSystem;
			if (o) {
				var e = o.getIndicatorAxes();
				E(e, function(t, n) {
					i.each(i.mapDimension(e[n].dim), function(t, e) {
						a[e] = a[e] || [];
						var i = o.dataToPoint(t, n);
						a[e][n] = Hv(i) ? i : Zv(o)
					})
				}), i.each(function(t) {
					var e = I(a[t], function(t) {
						return Hv(t)
					}) || Zv(o);
					a[t].push(e.slice()), i.setItemLayout(t, a[t])
				})
			}
		})
	}), Qd(kv("radar")), Jd(function(i) {
		var t = i.polar;
		if (t) {
			k(t) || (t = [t]);
			var n = [];
			E(t, function(t, e) {
				t.indicator ? (t.type && !t.shape && (t.shape = t.type), i.radar = i.radar || [], k(i.radar) || (i.radar = [i.radar]),
					i.radar.push(t)) : n.push(t)
			}), i.polar = n
		}
		E(i.series, function(t) {
			t && "radar" === t.type && t.polarIndex && (t.radarIndex = t.polarIndex)
		})
	});
	for (var Uv = [126, 25], Xv = [
			[
				[0, 3.5],
				[7, 11.2],
				[15, 11.9],
				[30, 7],
				[42, .7],
				[52, .7],
				[56, 7.7],
				[59, .7],
				[64, .7],
				[64, 0],
				[5, 0],
				[0, 3.5]
			],
			[
				[13, 16.1],
				[19, 14.7],
				[16, 21.7],
				[11, 23.1],
				[13, 16.1]
			],
			[
				[12, 32.2],
				[14, 38.5],
				[15, 38.5],
				[13, 32.2],
				[12, 32.2]
			],
			[
				[16, 47.6],
				[12, 53.2],
				[13, 53.2],
				[18, 47.6],
				[16, 47.6]
			],
			[
				[6, 64.4],
				[8, 70],
				[9, 70],
				[8, 64.4],
				[6, 64.4]
			],
			[
				[23, 82.6],
				[29, 79.8],
				[30, 79.8],
				[25, 82.6],
				[23, 82.6]
			],
			[
				[37, 70.7],
				[43, 62.3],
				[44, 62.3],
				[39, 70.7],
				[37, 70.7]
			],
			[
				[48, 51.1],
				[51, 45.5],
				[53, 45.5],
				[50, 51.1],
				[48, 51.1]
			],
			[
				[51, 35],
				[51, 28.7],
				[53, 28.7],
				[53, 35],
				[51, 35]
			],
			[
				[52, 22.4],
				[55, 17.5],
				[56, 17.5],
				[53, 22.4],
				[52, 22.4]
			],
			[
				[58, 12.6],
				[62, 7],
				[63, 7],
				[60, 12.6],
				[58, 12.6]
			],
			[
				[0, 3.5],
				[0, 93.1],
				[64, 93.1],
				[64, 0],
				[63, 0],
				[63, 92.4],
				[1, 92.4],
				[1, 3.5],
				[0, 3.5]
			]
		], Yv = 0; Yv < Xv.length; Yv++)
		for (var jv = 0; jv < Xv[Yv].length; jv++) Xv[Yv][jv][0] /= 10.5, Xv[Yv][jv][1] /= -14, Xv[Yv][jv][0] += Uv[0], Xv[
			Yv][jv][1] += Uv[1];
	var qv = {
			"南海诸岛": [32, 80],
			"广东": [0, -10],
			"香港": [10, 5],
			"澳门": [-10, 10],
			"天津": [5, 5]
		},
		Kv = {
			Russia: [100, 60],
			"United States": [-99, 38],
			"United States of America": [-99, 38]
		},
		$v = [
			[
				[123.45165252685547, 25.73527164402261],
				[123.49731445312499, 25.73527164402261],
				[123.49731445312499, 25.750734064600884],
				[123.45165252685547, 25.750734064600884],
				[123.45165252685547, 25.73527164402261]
			]
		],
		Jv = La(),
		Qv = {
			load: function(n, t) {
				var e = Jv(t).parsed;
				if (e) return e;
				var i, a = t.specialAreas || {},
					o = t.geoJSON;
				try {
					i = o ? rg(o) : []
				} catch (t) {
					throw new Error("Invalid geoJson format\n" + t.message)
				}
				return function(t, e) {
					"china" === t && e.push(new ag("南海诸岛", N(Xv, function(t) {
						return {
							type: "polygon",
							exterior: t
						}
					}), Uv))
				}(n, i), E(i, function(t) {
					var e = t.name;
					! function(t, e) {
						if ("china" === t) {
							var i = qv[e.name];
							if (i) {
								var n = e.center;
								n[0] += i[0] / 10.5, n[1] += -i[1] / 14
							}
						}
					}(n, t),
					function(t, e) {
						if ("world" === t) {
							var i = Kv[e.name];
							if (i) {
								var n = e.center;
								n[0] = i[0], n[1] = i[1]
							}
						}
					}(n, t),
					function(t, e) {
						"china" === t && "台湾" === e.name && e.geometries.push({
							type: "polygon",
							exterior: $v[0]
						})
					}(n, t);
					var i = a[e];
					i && t.transformTo(i.left, i.top, i.width, i.height)
				}), Jv(t).parsed = {
					regions: i,
					boundingRect: function(t) {
						for (var e, i = 0; i < t.length; i++) {
							var n = t[i].getBoundingRect();
							(e = e || n.clone()).union(n)
						}
						return e
					}(i)
				}
			}
		};
	var ty = La();

	function ey(t, e) {
		var i, n, a = t.svgXML;
		try {
			Y(null != (n = (i = a && function(t, e) {
				return (new Uc).parse(t, e)
			}(a, {
				ignoreViewBox: !0,
				ignoreRootClip: !0
			}) || {}).root))
		} catch (t) {
			throw new Error("Invalid svg format\n" + t.message)
		}
		var o = i.width,
			r = i.height,
			s = i.viewBoxRect;
		if (e || (e = null == o || null == r ? n.getBoundingRect() : new bi(0, 0, 0, 0), null != o && (e.width = o), null !=
				r && (e.height = r)), s) {
			var l = id(s, e.width, e.height),
				u = n;
			(n = new Si).add(u), u.scale = l.scale, u.position = l.position
		}
		return n.setClipPath(new Hr({
			shape: e.plain()
		})), {
			root: n,
			boundingRect: e
		}
	}
	var iy = {
			geoJSON: Qv,
			svg: {
				load: function(t, e) {
					var i = ty(e).originRoot;
					if (i) return {
						root: i,
						boundingRect: ty(e).boundingRect
					};
					var n = ey(e);
					return ty(e).originRoot = n.root, ty(e).boundingRect = n.boundingRect, n
				},
				makeGraphic: function(t, e, i) {
					var n = ty(e),
						a = n.rootMap || (n.rootMap = Q()),
						o = a.get(i);
					if (o) return o;
					var r = n.originRoot,
						s = n.boundingRect;
					return o = n.originRootHostKey ? ey(e, s).root : (n.originRootHostKey = i, r), a.set(i, o)
				},
				removeGraphic: function(t, e, i) {
					var n = ty(e),
						a = n.rootMap;
					a && a.removeKey(i), i === n.originRootHostKey && (n.originRootHostKey = null)
				}
			}
		},
		ny = {
			load: function(n, a) {
				var o, r = [],
					s = Q(),
					l = Q();
				return E(oy(n), function(t) {
					var e = iy[t.type].load(n, t);
					E(e.regions, function(t) {
						var e = t.name;
						a && a.hasOwnProperty(e) && (t = t.cloneShallow(e = a[e])), r.push(t), s.set(e, t), l.set(e, t.center)
					});
					var i = e.boundingRect;
					i && (o ? o.union(i) : o = i.clone())
				}), {
					regions: r,
					regionsMap: s,
					nameCoordMap: l,
					boundingRect: o || new bi(0, 0, 0, 0)
				}
			},
			makeGraphic: ay("makeGraphic"),
			removeGraphic: ay("removeGraphic")
		};

	function ay(o) {
		return function(i, n) {
			var t = oy(i),
				a = [];
			return E(t, function(t) {
				var e = iy[t.type][o];
				e && a.push(e(i, t, n))
			}), a
		}
	}

	function oy(t) {
		return ad.retrieveMap(t) || []
	}
	b(Wh.extend({
		type: "series.map",
		dependencies: ["geo"],
		layoutMode: "box",
		needsDrawMap: !1,
		seriesGroup: [],
		getInitialData: function(t) {
			for (var e = yv(this, ["value"]), i = e.mapDimension("value"), n = Q(), a = [], o = [], r = 0, s = e.count(); r <
				s; r++) {
				var l = e.getName(r);
				n.set(l, !0), a.push({
					name: l,
					value: e.get(i, r),
					selected: Ih(e, r, "selected")
				})
			}
			return E(ny.load(this.getMapType(), this.option.nameMap).regions, function(t) {
				var e = t.name;
				n.get(e) || (a.push({
					name: e
				}), o.push(e))
			}), this.updateSelectedMap(a), e.appendValues([], o), e
		},
		getHostGeoModel: function() {
			var t = this.option.geoIndex;
			return null != t ? this.dependentModels.geo[t] : null
		},
		getMapType: function() {
			return (this.getHostGeoModel() || this).option.map
		},
		getRawValue: function(t) {
			var e = this.getData();
			return e.get(e.mapDimension("value"), t)
		},
		getRegionModel: function(t) {
			var e = this.getData();
			return e.getItemModel(e.indexOfName(t))
		},
		formatTooltip: function(t) {
			for (var e = this.getData(), i = zl(this.getRawValue(t)), n = e.getName(t), a = this.seriesGroup, o = [], r = 0; r <
				a.length; r++) {
				var s = a[r].originalData.indexOfName(n),
					l = e.mapDimension("value");
				isNaN(a[r].originalData.get(l, s)) || o.push(Wl(a[r].name))
			}
			return o.join(", ") + "<br />" + Wl(n + " : " + i)
		},
		getTooltipPosition: function(t) {
			if (null != t) {
				var e = this.getData().getName(t),
					i = this.coordinateSystem,
					n = i.getRegion(e);
				return n && i.dataToPoint(n.center)
			}
		},
		setZoom: function(t) {
			this.option.zoom = t
		},
		setCenter: function(t) {
			this.option.center = t
		},
		defaultOption: {
			zlevel: 0,
			z: 2,
			coordinateSystem: "geo",
			map: "",
			left: "center",
			top: "center",
			aspectScale: .75,
			showLegendSymbol: !0,
			dataRangeHoverLink: !0,
			boundingCoords: null,
			center: null,
			zoom: 1,
			scaleLimit: null,
			label: {
				show: !1,
				color: "#000"
			},
			itemStyle: {
				borderWidth: .5,
				borderColor: "#444",
				areaColor: "#eee"
			},
			emphasis: {
				label: {
					show: !0,
					color: "rgb(100,0,0)"
				},
				itemStyle: {
					areaColor: "rgba(255,215,0,0.8)"
				}
			}
		}
	}), xv);
	var ry = "\0_ec_interaction_mutex";

	function sy(t, e) {
		return !!ly(t)[e]
	}

	function ly(t) {
		return t[ry] || (t[ry] = {})
	}

	function uy(i) {
		this.pointerChecker, this._zr = i, this._opt = {};
		var t = T,
			n = t(hy, this),
			a = t(cy, this),
			o = t(dy, this),
			r = t(fy, this),
			s = t(py, this);
		Ct.call(this), this.setPointerChecker = function(t) {
			this.pointerChecker = t
		}, this.enable = function(t, e) {
			this.disable(), this._opt = C(D(e) || {}, {
				zoomOnMouseWheel: !0,
				moveOnMouseMove: !0,
				moveOnMouseWheel: !1,
				preventDefaultMouseMove: !0
			}), null == t && (t = !0), !0 !== t && "move" !== t && "pan" !== t || (i.on("mousedown", n), i.on("mousemove", a),
				i.on("mouseup", o)), !0 !== t && "scale" !== t && "zoom" !== t || (i.on("mousewheel", r), i.on("pinch", s))
		}, this.disable = function() {
			i.off("mousedown", n), i.off("mousemove", a), i.off("mouseup", o), i.off("mousewheel", r), i.off("pinch", s)
		}, this.dispose = this.disable, this.isDragging = function() {
			return this._dragging
		}, this.isPinching = function() {
			return this._pinching
		}
	}

	function hy(t) {
		if (!(Wt(t) || t.target && t.target.draggable)) {
			var e = t.offsetX,
				i = t.offsetY;
			this.pointerChecker && this.pointerChecker(t, e, i) && (this._x = e, this._y = i, this._dragging = !0)
		}
	}

	function cy(t) {
		if (this._dragging && vy("moveOnMouseMove", t, this._opt) && "pinch" !== t.gestureEvent && !sy(this._zr, "globalPan")) {
			var e = t.offsetX,
				i = t.offsetY,
				n = this._x,
				a = this._y,
				o = e - n,
				r = i - a;
			this._x = e, this._y = i, this._opt.preventDefaultMouseMove && Ft(t.event), my(this, "pan", "moveOnMouseMove", t, {
				dx: o,
				dy: r,
				oldX: n,
				oldY: a,
				newX: e,
				newY: i
			})
		}
	}

	function dy(t) {
		Wt(t) || (this._dragging = !1)
	}

	function fy(t) {
		var e = vy("zoomOnMouseWheel", t, this._opt),
			i = vy("moveOnMouseWheel", t, this._opt),
			n = t.wheelDelta,
			a = Math.abs(n),
			o = t.offsetX,
			r = t.offsetY;
		if (0 !== n && (e || i)) {
			if (e) {
				var s = 3 < a ? 1.4 : 1 < a ? 1.2 : 1.1;
				gy(this, "zoom", "zoomOnMouseWheel", t, {
					scale: 0 < n ? s : 1 / s,
					originX: o,
					originY: r
				})
			}
			if (i) {
				var l = Math.abs(n);
				gy(this, "scrollMove", "moveOnMouseWheel", t, {
					scrollDelta: (0 < n ? 1 : -1) * (3 < l ? .4 : 1 < l ? .15 : .05),
					originX: o,
					originY: r
				})
			}
		}
	}

	function py(t) {
		sy(this._zr, "globalPan") || gy(this, "zoom", null, t, {
			scale: 1 < t.pinchScale ? 1.1 : 1 / 1.1,
			originX: t.pinchX,
			originY: t.pinchY
		})
	}

	function gy(t, e, i, n, a) {
		t.pointerChecker && t.pointerChecker(n, a.originX, a.originY) && (Ft(n.event), my(t, e, i, n, a))
	}

	function my(t, e, i, n, a) {
		a.isAvailableBehavior = T(vy, null, i, n), t.trigger(e, a)
	}

	function vy(t, e, i) {
		var n = i[t];
		return !t || n && (!R(n) || e.event[n + "Key"])
	}

	function yy(t, e, i) {
		var n = t.target,
			a = n.position;
		a[0] += e, a[1] += i, n.dirty()
	}

	function xy(t, e, i, n) {
		var a = t.target,
			o = t.zoomLimit,
			r = a.position,
			s = a.scale,
			l = t.zoom = t.zoom || 1;
		if (l *= e, o) {
			var u = o.min || 0,
				h = o.max || 1 / 0;
			l = Math.max(Math.min(h, l), u)
		}
		var c = l / t.zoom;
		t.zoom = l, r[0] -= (i - r[0]) * (c - 1), r[1] -= (n - r[1]) * (c - 1), s[0] *= c, s[1] *= c, a.dirty()
	}
	tf({
		type: "takeGlobalCursor",
		event: "globalCursorTaken",
		update: "update"
	}, function() {}), b(uy, Ct);
	var _y = {
		axisPointer: 1,
		tooltip: 1,
		brush: 1
	};

	function wy(t, e, i) {
		var n = e.getComponentByElement(t.topTarget),
			a = n && n.coordinateSystem;
		return n && n !== i && !_y[n.mainType] && a && a.model !== i
	}

	function by(t) {
		var e = t.getItemStyle(),
			i = t.get("areaColor");
		return null != i && (e.fill = i), e
	}

	function Sy(i, t) {
		t.eachChild(function(e) {
			E(e.__regions, function(t) {
				e.trigger(i.isSelected(t.name) ? "emphasis" : "normal")
			})
		})
	}

	function My(t, e) {
		var i = new Si;
		this.uid = ml("ec_map_draw"), this._controller = new uy(t.getZr()), this._controllerHost = {
			target: e ? i : null
		}, this.group = i, this._updateGroup = e, this._mouseDownFlag, this._mapName, this._initialized, i.add(this._regionsGroup =
			new Si), i.add(this._backgroundGroup = new Si)
	}
	My.prototype = {
		constructor: My,
		draw: function(_, t, e, i, n) {
			var w = "geo" === _.mainType,
				b = _.getData && _.getData();
			w && t.eachComponent({
				mainType: "series",
				subType: "map"
			}, function(t) {
				b || t.getHostGeoModel() !== _ || (b = t.getData())
			});
			var a = _.coordinateSystem;
			this._updateBackground(a);
			var S = this._regionsGroup,
				M = this.group;
			a._roamTransformable.transform && (M.transform = a._roamTransformable.transform.slice(), M.decomposeTransform());
			var I = a._rawTransformable.scale,
				A = a._rawTransformable.position;
			S.removeAll();
			var T = ["itemStyle"],
				D = ["emphasis", "itemStyle"],
				C = ["label"],
				L = ["emphasis", "label"],
				k = Q();
			E(a.regions, function(t) {
					var e = k.get(t.name) || k.set(t.name, new Si),
						o = new $r({
							segmentIgnoreThreshold: 1,
							shape: {
								paths: []
							}
						});
					e.add(o);
					var i, n = (x = _.getRegionModel(t.name) || _).getModel(T),
						a = x.getModel(D),
						r = by(n),
						s = by(a),
						l = x.getModel(C),
						u = x.getModel(L);
					if (b) {
						i = b.indexOfName(t.name);
						var h = b.getItemVisual(i, "color", !0);
						h && (r.fill = h)
					}

					function c(t) {
						return [t[0] * I[0] + A[0], t[1] * I[1] + A[1]]
					}
					E(t.geometries, function(t) {
						if ("polygon" === t.type) {
							for (var e = [], i = 0; i < t.exterior.length; ++i) e.push(c(t.exterior[i]));
							o.shape.paths.push(new Rr({
								segmentIgnoreThreshold: 1,
								shape: {
									points: e
								}
							}));
							for (i = 0; i < (t.interiors ? t.interiors.length : 0); ++i) {
								for (var n = t.interiors[i], a = (e = [], 0); a < n.length; ++a) e.push(c(n[a]));
								o.shape.paths.push(new Rr({
									segmentIgnoreThreshold: 1,
									shape: {
										points: e
									}
								}))
							}
						}
					}), o.setStyle(r), o.style.strokeNoScale = !0, o.culling = !0;
					var d = l.get("show"),
						f = u.get("show"),
						p = b && isNaN(b.get(b.mapDimension("value"), i)),
						g = b && b.getItemLayout(i);
					if (w || p && (d || f) || g && g.showLabel) {
						var m, v = w ? t.name : i;
						(!b || 0 <= i) && (m = _);
						var y = new Dr({
							position: c(t.center.slice()),
							scale: [1 / M.scale[0], 1 / M.scale[1]],
							z2: 10,
							silent: !0
						});
						Bs(y.style, y.hoverStyle = {}, l, u, {
							labelFetcher: m,
							labelDataIndex: v,
							defaultText: t.name,
							useInsideStyle: !1
						}, {
							textAlign: "center",
							textVerticalAlign: "middle"
						}), e.add(y)
					}
					if (b) b.setItemGraphicEl(i, e);
					else {
						var x = _.getRegionModel(t.name);
						o.eventData = {
							componentType: "geo",
							componentIndex: _.componentIndex,
							geoIndex: _.componentIndex,
							name: t.name,
							region: x && x.option || {}
						}
					}(e.__regions || (e.__regions = [])).push(t), e.highDownSilentOnTouch = !!_.get("selectedMode"), Os(e, s), S.add(
						e)
				}), this._updateController(_, t, e),
				function(n, a, o, r, s) {
					o.off("click"), o.off("mousedown"), a.get("selectedMode") && (o.on("mousedown", function() {
						n._mouseDownFlag = !0
					}), o.on("click", function(t) {
						if (n._mouseDownFlag) {
							n._mouseDownFlag = !1;
							for (var e = t.target; !e.__regions;) e = e.parent;
							if (e) {
								var i = {
									type: ("geo" === a.mainType ? "geo" : "map") + "ToggleSelect",
									batch: N(e.__regions, function(t) {
										return {
											name: t.name,
											from: s.uid
										}
									})
								};
								i[a.mainType + "Id"] = a.id, r.dispatchAction(i), Sy(a, o)
							}
						}
					}))
				}(this, _, S, e, i), Sy(_, S)
		},
		remove: function() {
			this._regionsGroup.removeAll(), this._backgroundGroup.removeAll(), this._controller.dispose(), this._mapName &&
				ny.removeGraphic(this._mapName, this.uid), this._mapName = null, this._controllerHost = {}
		},
		_updateBackground: function(t) {
			var e = t.map;
			this._mapName !== e && E(ny.makeGraphic(e, this.uid), function(t) {
				this._backgroundGroup.add(t)
			}, this), this._mapName = e
		},
		_updateController: function(n, t, a) {
			var o = n.coordinateSystem,
				e = this._controller,
				i = this._controllerHost;
			i.zoomLimit = n.get("scaleLimit"), i.zoom = o.getZoom(), e.enable(n.get("roam") || !1);
			var r = n.mainType;

			function s() {
				var t = {
					type: "geoRoam",
					componentType: r
				};
				return t[r + "Id"] = n.id, t
			}
			e.off("pan").on("pan", function(t) {
				this._mouseDownFlag = !1, yy(i, t.dx, t.dy), a.dispatchAction(L(s(), {
					dx: t.dx,
					dy: t.dy
				}))
			}, this), e.off("zoom").on("zoom", function(t) {
				if (this._mouseDownFlag = !1, xy(i, t.scale, t.originX, t.originY), a.dispatchAction(L(s(), {
						zoom: t.scale,
						originX: t.originX,
						originY: t.originY
					})), this._updateGroup) {
					var e = this.group.scale;
					this._regionsGroup.traverse(function(t) {
						"text" === t.type && t.attr("scale", [1 / e[0], 1 / e[1]])
					})
				}
			}, this), e.setPointerChecker(function(t, e, i) {
				return o.getViewRectAfterRoam().contain(e, i) && !wy(t, a, n)
			})
		}
	};
	var Iy = "__seriesMapHighDown",
		Ay = "__seriesMapCallKey";

	function Ty(t) {
		var e = this[Iy];
		e && e.recordVersion === this[Ay] && Dy(e, t)
	}

	function Dy(t, e) {
		var i = t.circle,
			n = t.labelModel,
			a = t.hoverLabelModel,
			o = t.emphasisText,
			r = t.normalText;
		e ? (i.style.extendFrom(Gs({}, a, {
			text: a.get("show") ? o : null
		}, {
			isRectText: !0,
			useInsideStyle: !1
		}, !0)), i.__mapOriginalZ2 = i.z2, i.z2 += os) : (Gs(i.style, n, {
			text: n.get("show") ? r : null,
			textPosition: n.getShallow("position") || "bottom"
		}, {
			isRectText: !0,
			useInsideStyle: !1
		}), i.dirty(!1), null != i.__mapOriginalZ2 && (i.z2 = i.__mapOriginalZ2, i.__mapOriginalZ2 = null))
	}

	function Cy(t, e, i) {
		var n = t.getZoom(),
			a = t.getCenter(),
			o = e.zoom,
			r = t.dataToPoint(a);
		if (null != e.dx && null != e.dy) {
			r[0] -= e.dx, r[1] -= e.dy;
			a = t.pointToData(r);
			t.setCenter(a)
		}
		if (null != o) {
			if (i) {
				var s = i.min || 0,
					l = i.max || 1 / 0;
				o = Math.max(Math.min(n * o, l), s) / n
			}
			t.scale[0] *= o, t.scale[1] *= o;
			var u = t.position,
				h = (e.originX - u[0]) * (o - 1),
				c = (e.originY - u[1]) * (o - 1);
			u[0] -= h, u[1] -= c, t.updateTransform();
			a = t.pointToData(r);
			t.setCenter(a), t.setZoom(o * n)
		}
		return {
			center: t.getCenter(),
			zoom: t.getZoom()
		}
	}
	hf({
		type: "map",
		render: function(t, e, i, n) {
			if (!n || "mapToggleSelect" !== n.type || n.from !== this.uid) {
				var a = this.group;
				if (a.removeAll(), !t.getHostGeoModel()) {
					if (n && "geoRoam" === n.type && "series" === n.componentType && n.seriesId === t.id)(o = this._mapDraw) && a.add(
						o.group);
					else if (t.needsDrawMap) {
						var o = this._mapDraw || new My(i, !0);
						a.add(o.group), o.draw(t, e, i, this, n), this._mapDraw = o
					} else this._mapDraw && this._mapDraw.remove(), this._mapDraw = null;
					t.get("showLegendSymbol") && e.getComponent("legend") && this._renderSymbols(t, e, i)
				}
			}
		},
		remove: function() {
			this._mapDraw && this._mapDraw.remove(), this._mapDraw = null, this.group.removeAll()
		},
		dispose: function() {
			this._mapDraw && this._mapDraw.remove(), this._mapDraw = null
		},
		_renderSymbols: function(x, t, e) {
			var _ = x.originalData,
				w = this.group;
			_.each(_.mapDimension("value"), function(t, e) {
				if (!isNaN(t)) {
					var i = _.getItemLayout(e);
					if (i && i.point) {
						var n = i.point,
							a = i.offset,
							o = new Lr({
								style: {
									fill: x.getData().getVisual("color")
								},
								shape: {
									cx: n[0] + 9 * a,
									cy: n[1],
									r: 3
								},
								silent: !0,
								z2: 8 + (a ? 0 : os + 1)
							});
						if (!a) {
							var r = x.mainSeries.getData(),
								s = _.getName(e),
								l = r.indexOfName(s),
								u = _.getItemModel(e),
								h = u.getModel("label"),
								c = u.getModel("emphasis.label"),
								d = r.getItemGraphicEl(l),
								f = H(x.getFormattedLabel(l, "normal"), s),
								p = H(x.getFormattedLabel(l, "emphasis"), f),
								g = d[Iy],
								m = Math.random();
							if (!g) {
								g = d[Iy] = {};
								var v = A(Ty, !0),
									y = A(Ty, !1);
								d.on("mouseover", v).on("mouseout", y).on("emphasis", v).on("normal", y)
							}
							L(g, {
								recordVersion: d[Ay] = m,
								circle: o,
								labelModel: h,
								hoverLabelModel: c,
								emphasisText: p,
								normalText: f
							}), Dy(g, !1)
						}
						w.add(o)
					}
				}
			})
		}
	}), tf({
		type: "geoRoam",
		event: "geoRoam",
		update: "updateTransform"
	}, function(n, t) {
		var a = n.componentType || "series";
		t.eachComponent({
			mainType: a,
			query: n
		}, function(t) {
			var e = t.coordinateSystem;
			if ("geo" === e.type) {
				var i = Cy(e, n, t.get("scaleLimit"));
				t.setCenter && t.setCenter(i.center), t.setZoom && t.setZoom(i.zoom), "series" === a && E(t.seriesGroup,
					function(t) {
						t.setCenter(i.center), t.setZoom(i.zoom)
					})
			}
		})
	});
	var Ly = bt;

	function ky() {
		ce.call(this)
	}

	function Py(t) {
		this.name = t, this.zoomLimit, ce.call(this), this._roamTransformable = new ky, this._rawTransformable = new ky,
			this._center, this._zoom
	}

	function Ny(t, e, i, n) {
		var a = i.seriesModel,
			o = a ? a.coordinateSystem : null;
		return o === this ? o[t](n) : null
	}

	function Oy(t, e, i, n) {
		Py.call(this, t), this.map = e;
		var a = ny.load(e, i);
		this._nameCoordMap = a.nameCoordMap, this._regionsMap = a.regionsMap, this._invertLongitute = null == n || n, this.regions =
			a.regions, this._rect = a.boundingRect
	}

	function Ey(t, e, i, n) {
		var a = i.geoModel,
			o = i.seriesModel,
			r = a ? a.coordinateSystem : o ? o.coordinateSystem || (o.getReferringComponents("geo")[0] || {}).coordinateSystem :
			null;
		return r === this ? r[t](n) : null
	}

	function Ry(t, e) {
		var i = t.get("boundingCoords");
		if (null != i) {
			var n = i[0],
				a = i[1];
			isNaN(n[0]) || isNaN(n[1]) || isNaN(a[0]) || isNaN(a[1]) || this.setBoundingRect(n[0], n[1], a[0] - n[0], a[1] - n[
				1])
		}
		var o, r = this.getBoundingRect(),
			s = t.get("layoutCenter"),
			l = t.get("layoutSize"),
			u = e.getWidth(),
			h = e.getHeight(),
			c = r.width / r.height * this.aspectScale,
			d = !1;
		if (s && l && (s = [xl(s[0], u), xl(s[1], h)], l = xl(l, Math.min(u, h)), isNaN(s[0]) || isNaN(s[1]) || isNaN(l) ||
				(d = !0)), d) {
			var f = {};
			1 < c ? (f.width = l, f.height = l / c) : (f.height = l, f.width = l * c), f.y = s[1] - f.height / 2, f.x = s[0] -
				f.width / 2
		} else(o = t.getBoxLayoutParams()).aspect = c, f = au(o, {
			width: u,
			height: h
		});
		this.setViewRect(f.x, f.y, f.width, f.height), this.setCenter(t.get("center")), this.setZoom(t.get("zoom"))
	}

	function zy(i, t) {
		E(t.get("geoCoord"), function(t, e) {
			i.addGeoCoord(e, t)
		})
	}
	b(ky, ce), Py.prototype = {
		constructor: Py,
		type: "view",
		dimensions: ["x", "y"],
		setBoundingRect: function(t, e, i, n) {
			return this._rect = new bi(t, e, i, n), this._rect
		},
		getBoundingRect: function() {
			return this._rect
		},
		setViewRect: function(t, e, i, n) {
			this.transformTo(t, e, i, n), this._viewRect = new bi(t, e, i, n)
		},
		transformTo: function(t, e, i, n) {
			var a = this.getBoundingRect(),
				o = this._rawTransformable;
			o.transform = a.calculateTransform(new bi(t, e, i, n)), o.decomposeTransform(), this._updateTransform()
		},
		setCenter: function(t) {
			t && (this._center = t, this._updateCenterAndZoom())
		},
		setZoom: function(t) {
			t = t || 1;
			var e = this.zoomLimit;
			e && (null != e.max && (t = Math.min(e.max, t)), null != e.min && (t = Math.max(e.min, t))), this._zoom = t, this
				._updateCenterAndZoom()
		},
		getDefaultCenter: function() {
			var t = this.getBoundingRect();
			return [t.x + t.width / 2, t.y + t.height / 2]
		},
		getCenter: function() {
			return this._center || this.getDefaultCenter()
		},
		getZoom: function() {
			return this._zoom || 1
		},
		getRoamTransform: function() {
			return this._roamTransformable.getLocalTransform()
		},
		_updateCenterAndZoom: function() {
			var t = this._rawTransformable.getLocalTransform(),
				e = this._roamTransformable,
				i = this.getDefaultCenter(),
				n = this.getCenter(),
				a = this.getZoom();
			n = bt([], n, t), i = bt([], i, t), e.origin = n, e.position = [i[0] - n[0], i[1] - n[1]], e.scale = [a, a], this
				._updateTransform()
		},
		_updateTransform: function() {
			var t = this._roamTransformable,
				e = this._rawTransformable;
			(e.parent = t).updateTransform(), e.updateTransform(), ee(this.transform || (this.transform = []), e.transform ||
				Qt()), this._rawTransform = e.getLocalTransform(), this.invTransform = this.invTransform || [], re(this.invTransform,
				this.transform), this.decomposeTransform()
		},
		getViewRect: function() {
			return this._viewRect
		},
		getViewRectAfterRoam: function() {
			var t = this.getBoundingRect().clone();
			return t.applyTransform(this.transform), t
		},
		dataToPoint: function(t, e, i) {
			var n = e ? this._rawTransform : this.transform;
			return i = i || [], n ? Ly(i, t, n) : ot(i, t)
		},
		pointToData: function(t) {
			var e = this.invTransform;
			return e ? Ly([], t, e) : [t[0], t[1]]
		},
		convertToPixel: A(Ny, "dataToPoint"),
		convertFromPixel: A(Ny, "pointToData"),
		containPoint: function(t) {
			return this.getViewRectAfterRoam().contain(t[0], t[1])
		}
	}, b(Py, ce), Oy.prototype = {
		constructor: Oy,
		type: "geo",
		dimensions: ["lng", "lat"],
		containCoord: function(t) {
			for (var e = this.regions, i = 0; i < e.length; i++)
				if (e[i].contain(t)) return !0;
			return !1
		},
		transformTo: function(t, e, i, n) {
			var a = this.getBoundingRect(),
				o = this._invertLongitute;
			a = a.clone(), o && (a.y = -a.y - a.height);
			var r = this._rawTransformable;
			if (r.transform = a.calculateTransform(new bi(t, e, i, n)), r.decomposeTransform(), o) {
				var s = r.scale;
				s[1] = -s[1]
			}
			r.updateTransform(), this._updateTransform()
		},
		getRegion: function(t) {
			return this._regionsMap.get(t)
		},
		getRegionByCoord: function(t) {
			for (var e = this.regions, i = 0; i < e.length; i++)
				if (e[i].contain(t)) return e[i]
		},
		addGeoCoord: function(t, e) {
			this._nameCoordMap.set(t, e)
		},
		getGeoCoord: function(t) {
			return this._nameCoordMap.get(t)
		},
		getBoundingRect: function() {
			return this._rect
		},
		dataToPoint: function(t, e, i) {
			if ("string" == typeof t && (t = this.getGeoCoord(t)), t) return Py.prototype.dataToPoint.call(this, t, e, i)
		},
		convertToPixel: A(Ey, "dataToPoint"),
		convertFromPixel: A(Ey, "pointToData")
	}, b(Oy, Py);
	var By = {
		dimensions: Oy.prototype.dimensions,
		create: function(t, s) {
			var l = [];
			t.eachComponent("geo", function(t, e) {
				var i = t.get("map"),
					n = t.get("aspectScale"),
					a = !0,
					o = ad.retrieveMap(i);
				o && o[0] && "svg" === o[0].type ? (null == n && (n = 1), a = !1) : null == n && (n = .75);
				var r = new Oy(i + e, i, t.get("nameMap"), a);
				r.aspectScale = n, r.zoomLimit = t.get("scaleLimit"), l.push(r), zy(r, t), (t.coordinateSystem = r).model = t,
					r.resize = Ry, r.resize(t, s)
			}), t.eachSeries(function(t) {
				if ("geo" === t.get("coordinateSystem")) {
					var e = t.get("geoIndex") || 0;
					t.coordinateSystem = l[e]
				}
			});
			var i = {};
			return t.eachSeriesByType("map", function(t) {
				if (!t.getHostGeoModel()) {
					var e = t.getMapType();
					i[e] = i[e] || [], i[e].push(t)
				}
			}), E(i, function(t, e) {
				var i = new Oy(e, e, p(N(t, function(t) {
					return t.get("nameMap")
				})));
				i.zoomLimit = W.apply(null, N(t, function(t) {
					return t.get("scaleLimit")
				})), l.push(i), i.resize = Ry, i.aspectScale = t[0].get("aspectScale"), i.resize(t[0], s), E(t, function(t) {
					zy(t.coordinateSystem = i, t)
				})
			}), l
		},
		getFilledRegions: function(t, e, i) {
			for (var n = (t || []).slice(), a = Q(), o = 0; o < n.length; o++) a.set(n[o].name, n[o]);
			return E(ny.load(e, i).regions, function(t) {
				var e = t.name;
				a.get(e) || n.push({
					name: e
				})
			}), n
		}
	};
	ef("geo", By);
	nf(function(i) {
		var a = {};
		i.eachSeriesByType("map", function(t) {
			var e = t.getMapType();
			if (!t.getHostGeoModel() && !a[e]) {
				var l = {};
				E(t.seriesGroup, function(t) {
					var r = t.coordinateSystem,
						s = t.originalData;
					t.get("showLegendSymbol") && i.getComponent("legend") && s.each(s.mapDimension("value"), function(t, e) {
						var i = s.getName(e),
							n = r.getRegion(i);
						if (n && !isNaN(t)) {
							var a = l[i] || 0,
								o = r.dataToPoint(n.center);
							l[i] = a + 1, s.setItemLayout(e, {
								point: o,
								offset: a
							})
						}
					})
				});
				var n = t.getData();
				n.each(function(t) {
					var e = n.getName(t),
						i = n.getItemLayout(t) || {};
					i.showLabel = !l[e], n.setItemLayout(t, i)
				}), a[e] = !0
			}
		})
	}), af(function(t) {
		t.eachSeriesByType("map", function(t) {
			var e = t.get("color"),
				i = t.getModel("itemStyle"),
				n = i.get("areaColor"),
				a = i.get("color") || e[t.seriesIndex % e.length];
			t.getData().setVisual({
				areaColor: n,
				color: a
			})
		})
	}), Qd(cd.PROCESSOR.STATISTIC, function(t) {
		var n = {};
		t.eachSeriesByType("map", function(t) {
			var e = t.getHostGeoModel(),
				i = e ? "o" + e.id : "i" + t.getMapType();
			(n[i] = n[i] || []).push(t)
		}), E(n, function(t, e) {
			for (var i = function(u, h) {
					var c = {};
					return E(u, function(n) {
						n.each(n.mapDimension("value"), function(t, e) {
							var i = "ec-" + n.getName(e);
							c[i] = c[i] || [], isNaN(t) || c[i].push(t)
						})
					}), u[0].map(u[0].mapDimension("value"), function(t, e) {
						for (var i, n = "ec-" + u[0].getName(e), a = 0, o = 1 / 0, r = -1 / 0, s = c[n].length, l = 0; l < s; l++)
							o = Math.min(o, c[n][l]), r = Math.max(r, c[n][l]), a += c[n][l];
						return i = "min" === h ? o : "max" === h ? r : "average" === h ? a / s : a, 0 === s ? NaN : i
					})
				}(N(t, function(t) {
					return t.getData()
				}), t[0].get("mapValueCalculation")), n = 0; n < t.length; n++) t[n].originalData = t[n].getData();
			for (n = 0; n < t.length; n++)(t[n].seriesGroup = t)[n].needsDrawMap = 0 === n && !t[n].getHostGeoModel(), t[n]
				.setData(i.cloneShallow()), t[n].mainSeries = t[0]
		})
	}), Jd(function(t) {
		var e = [];
		E(t.series, function(t) {
			t && "map" === t.type && (e.push(t), t.map = t.map || t.mapType, C(t, t.mapLocation))
		})
	}), Iv("map", [{
		type: "mapToggleSelect",
		event: "mapselectchanged",
		method: "toggleSelected"
	}, {
		type: "mapSelect",
		event: "mapselected",
		method: "select"
	}, {
		type: "mapUnSelect",
		event: "mapunselected",
		method: "unSelect"
	}]);
	var Vy = E,
		Gy = "\0__link_datas",
		Fy = "\0__link_mainData";

	function Wy(i) {
		var n = i.mainData,
			t = i.datas;
		t || (t = {
			main: n
		}, i.datasAttr = {
			main: "data"
		}), i.datas = i.mainData = null, Yy(n, t, i), Vy(t, function(e) {
			Vy(n.TRANSFERABLE_METHODS, function(t) {
				e.wrapMethod(t, A(Hy, i))
			})
		}), n.wrapMethod("cloneShallow", A(Uy, i)), Vy(n.CHANGABLE_METHODS, function(t) {
			n.wrapMethod(t, A(Zy, i))
		}), Y(t[n.dataType] === n)
	}

	function Hy(t, e) {
		if (function(t) {
				return t[Fy] === t
			}(this)) {
			var i = L({}, this[Gy]);
			Yy(i[this.dataType] = e, i, t)
		} else jy(e, this.dataType, this[Fy], t);
		return e
	}

	function Zy(t, e) {
		return t.struct && t.struct.update(this), e
	}

	function Uy(i, n) {
		return Vy(n[Gy], function(t, e) {
			t !== n && jy(t.cloneShallow(), e, n, i)
		}), n
	}

	function Xy(t) {
		var e = this[Fy];
		return null == t || null == e ? e : e[Gy][t]
	}

	function Yy(i, t, n) {
		i[Gy] = {}, Vy(t, function(t, e) {
			jy(t, e, i, n)
		})
	}

	function jy(t, e, i, n) {
		(i[Gy][e] = t)[Fy] = i, t.dataType = e, n.struct && (t[n.structAttr] = n.struct, n.struct[n.datasAttr[e]] = t), t.getLinkedData =
			Xy
	}

	function qy(t, e) {
		this.name = t || "", this.depth = 0, this.height = 0, this.parentNode = null, this.dataIndex = -1, this.children = [],
			this.viewChildren = [], this.hostTree = e
	}

	function Ky(e, t, i) {
		this.root, this.data, this._nodes = [], this.hostModel = e, this.levelModels = N(t || [], function(t) {
			return new dl(t, e, e.ecModel)
		}), this.leavesModel = new dl(i || {}, e, e.ecModel)
	}

	function $y(t, e) {
		var i = e.children;
		t.parentNode !== e && (i.push(t), t.parentNode = e)
	}

	function Jy(t, e) {
		var i = t.isExpand ? t.children : [],
			n = t.parentNode.children,
			a = t.hierNode.i ? n[t.hierNode.i - 1] : null;
		if (i.length) {
			! function(t) {
				var e = t.children,
					i = e.length,
					n = 0,
					a = 0;
				for (; 0 <= --i;) {
					var o = e[i];
					o.hierNode.prelim += n, o.hierNode.modifier += n, a += o.hierNode.change, n += o.hierNode.shift + a
				}
			}(t);
			var o = (i[0].hierNode.prelim + i[i.length - 1].hierNode.prelim) / 2;
			a ? (t.hierNode.prelim = a.hierNode.prelim + e(t, a), t.hierNode.modifier = t.hierNode.prelim - o) : t.hierNode.prelim =
				o
		} else a && (t.hierNode.prelim = a.hierNode.prelim + e(t, a));
		t.parentNode.hierNode.defaultAncestor = function(t, e, i, n) {
			if (e) {
				for (var a = t, o = t, r = o.parentNode.children[0], s = e, l = a.hierNode.modifier, u = o.hierNode.modifier, h =
						r.hierNode.modifier, c = s.hierNode.modifier; s = ix(s), o = nx(o), s && o;) {
					a = ix(a), r = nx(r), a.hierNode.ancestor = t;
					var d = s.hierNode.prelim + c - o.hierNode.prelim - u + n(s, o);
					0 < d && (ax((p = t, g = i, (f = s).hierNode.ancestor.parentNode === p.parentNode ? f.hierNode.ancestor : g), t,
							d), u += d, l += d), c += s.hierNode.modifier, u += o.hierNode.modifier, l += a.hierNode.modifier, h += r.hierNode
						.modifier
				}
				s && !ix(a) && (a.hierNode.thread = s, a.hierNode.modifier += c - l), o && !nx(r) && (r.hierNode.thread = o, r.hierNode
					.modifier += u - h, i = t)
			}
			var f, p, g;
			return i
		}(t, a, t.parentNode.hierNode.defaultAncestor || n[0], e)
	}

	function Qy(t) {
		var e = t.hierNode.prelim + t.parentNode.hierNode.modifier;
		t.setLayout({
			x: e
		}, !0), t.hierNode.modifier += t.parentNode.hierNode.modifier
	}

	function tx(t) {
		return arguments.length ? t : ox
	}

	function ex(t, e) {
		var i = {};
		return t -= Math.PI / 2, i.x = e * Math.cos(t), i.y = e * Math.sin(t), i
	}

	function ix(t) {
		var e = t.children;
		return e.length && t.isExpand ? e[e.length - 1] : t.hierNode.thread
	}

	function nx(t) {
		var e = t.children;
		return e.length && t.isExpand ? e[0] : t.hierNode.thread
	}

	function ax(t, e, i) {
		var n = i / (e.hierNode.i - t.hierNode.i);
		e.hierNode.change -= n, e.hierNode.shift += i, e.hierNode.modifier += i, e.hierNode.prelim += i, t.hierNode.change +=
			n
	}

	function ox(t, e) {
		return t.parentNode === e.parentNode ? 1 : 2
	}

	function rx(t, e) {
		var i = t.getItemLayout(e);
		return i && !isNaN(i.x) && !isNaN(i.y) && "none" !== t.getItemVisual(e, "symbol")
	}

	function sx(t, e, i) {
		return i.itemModel = e, i.itemStyle = e.getModel("itemStyle").getItemStyle(), i.hoverItemStyle = e.getModel(
				"emphasis.itemStyle").getItemStyle(), i.lineStyle = e.getModel("lineStyle").getLineStyle(), i.labelModel = e.getModel(
				"label"), i.hoverLabelModel = e.getModel("emphasis.label"), !1 === t.isExpand && 0 !== t.children.length ? i.symbolInnerColor =
			i.itemStyle.fill : i.symbolInnerColor = "#fff", i
	}

	function lx(t, e, i, n, a, o) {
		var r = !i,
			s = t.tree.getNodeByDataIndex(e),
			l = s.getModel(),
			u = (o = sx(s, l, o), t.tree.root),
			h = s.parentNode === u ? s : s.parentNode || s,
			c = t.getItemGraphicEl(h.dataIndex),
			d = h.getLayout(),
			f = c ? {
				x: c.position[0],
				y: c.position[1],
				rawX: c.__radialOldRawX,
				rawY: c.__radialOldRawY
			} : d,
			p = s.getLayout();
		r ? (i = new Sg(t, e, o)).attr("position", [f.x, f.y]) : i.updateData(t, e, o), i.__radialOldRawX = i.__radialRawX,
			i.__radialOldRawY = i.__radialRawY, i.__radialRawX = p.rawX, i.__radialRawY = p.rawY, n.add(i), t.setItemGraphicEl(
				e, i), js(i, {
				position: [p.x, p.y]
			}, a);
		var g = i.getSymbolPath();
		if ("radial" === o.layout) {
			var m, v, y = u.children[0],
				x = y.getLayout(),
				_ = y.children.length;
			if (p.x === x.x && !0 === s.isExpand) {
				var w = {};
				w.x = (y.children[0].getLayout().x + y.children[_ - 1].getLayout().x) / 2, w.y = (y.children[0].getLayout().y + y.children[
						_ - 1].getLayout().y) / 2, (m = Math.atan2(w.y - x.y, w.x - x.x)) < 0 && (m = 2 * Math.PI + m), (v = w.x < x.x) &&
					(m -= Math.PI)
			} else(m = Math.atan2(p.y - x.y, p.x - x.x)) < 0 && (m = 2 * Math.PI + m), 0 === s.children.length || 0 !== s.children
				.length && !1 === s.isExpand ? (v = p.x < x.x) && (m -= Math.PI) : (v = p.x > x.x) || (m -= Math.PI);
			var b = v ? "left" : "right",
				S = o.labelModel.get("rotate"),
				M = S * (Math.PI / 180);
			g.setStyle({
				textPosition: o.labelModel.get("position") || b,
				textRotation: null == S ? -m : M,
				textOrigin: "center",
				verticalAlign: "middle"
			})
		}
		if (s.parentNode && s.parentNode !== u) {
			var I = i.__edge;
			js(I = I || (i.__edge = new qr({
				shape: hx(o, f, f),
				style: C({
					opacity: 0,
					strokeNoScale: !0
				}, o.lineStyle)
			})), {
				shape: hx(o, d, p),
				style: {
					opacity: 1
				}
			}, a), n.add(I)
		}
	}

	function ux(t, e, i, n, a, o) {
		for (var r, s = t.tree.getNodeByDataIndex(e), l = t.tree.root, u = s.getModel(), h = (o = sx(s, u, o), s.parentNode ===
				l ? s : s.parentNode || s); null == (r = h.getLayout());) h = h.parentNode === l ? h : h.parentNode || h;
		js(i, {
			position: [r.x + 1, r.y + 1]
		}, a, function() {
			n.remove(i), t.setItemGraphicEl(e, null)
		}), i.fadeOut(null, {
			keepLabel: !0
		});
		var c = i.__edge;
		c && js(c, {
			shape: hx(o, r, r),
			style: {
				opacity: 0
			}
		}, a, function() {
			n.remove(c)
		})
	}

	function hx(t, e, i) {
		var n, a, o, r, s, l, u, h, c = t.orient;
		if ("radial" !== t.layout) return s = e.x, u = e.y, l = i.x, h = i.y, "LR" !== c && "RL" !== c || (n = s + (l - s) *
			t.curvature, a = u, o = l + (s - l) * t.curvature, r = h), "TB" !== c && "BT" !== c || (n = s, a = u + (h - u) *
			t.curvature, o = l, r = h + (u - h) * t.curvature), {
			x1: s,
			y1: u,
			x2: l,
			y2: h,
			cpx1: n,
			cpy1: a,
			cpx2: o,
			cpy2: r
		};
		s = e.rawX, u = e.rawY, l = i.rawX, h = i.rawY;
		var d = ex(s, u),
			f = ex(s, u + (h - u) * t.curvature),
			p = ex(l, h + (u - h) * t.curvature),
			g = ex(l, h);
		return {
			x1: d.x,
			y1: d.y,
			x2: g.x,
			y2: g.y,
			cpx1: f.x,
			cpy1: f.y,
			cpx2: p.x,
			cpy2: p.y
		}
	}

	function cx(t, e) {
		for (var i, n = [t]; i = n.pop();)
			if (e(i), i.isExpand) {
				var a = i.children;
				if (a.length)
					for (var o = a.length - 1; 0 <= o; o--) n.push(a[o])
			}
	}
	qy.prototype = {
		constructor: qy,
		isRemoved: function() {
			return this.dataIndex < 0
		},
		eachNode: function(t, e, i) {
			"function" == typeof t && (i = e, e = t, t = null), R(t = t || {}) && (t = {
				order: t
			});
			var n, a = t.order || "preorder",
				o = this[t.attr || "children"];
			"preorder" === a && (n = e.call(i, this));
			for (var r = 0; !n && r < o.length; r++) o[r].eachNode(t, e, i);
			"postorder" === a && e.call(i, this)
		},
		updateDepthAndHeight: function(t) {
			var e = 0;
			this.depth = t;
			for (var i = 0; i < this.children.length; i++) {
				var n = this.children[i];
				n.updateDepthAndHeight(t + 1), n.height > e && (e = n.height)
			}
			this.height = e + 1
		},
		getNodeById: function(t) {
			if (this.getId() === t) return this;
			for (var e = 0, i = this.children, n = i.length; e < n; e++) {
				var a = i[e].getNodeById(t);
				if (a) return a
			}
		},
		contains: function(t) {
			if (t === this) return !0;
			for (var e = 0, i = this.children, n = i.length; e < n; e++) {
				var a = i[e].contains(t);
				if (a) return a
			}
		},
		getAncestors: function(t) {
			for (var e = [], i = t ? this : this.parentNode; i;) e.push(i), i = i.parentNode;
			return e.reverse(), e
		},
		getValue: function(t) {
			var e = this.hostTree.data;
			return e.get(e.getDimension(t || "value"), this.dataIndex)
		},
		setLayout: function(t, e) {
			0 <= this.dataIndex && this.hostTree.data.setItemLayout(this.dataIndex, t, e)
		},
		getLayout: function() {
			return this.hostTree.data.getItemLayout(this.dataIndex)
		},
		getModel: function(t) {
			if (!(this.dataIndex < 0)) {
				var e, i = this.hostTree,
					n = i.data.getItemModel(this.dataIndex),
					a = this.getLevelModel();
				return a || 0 !== this.children.length && (0 === this.children.length || !1 !== this.isExpand) || (e = this.getLeavesModel()),
					n.getModel(t, (a || e || i.hostModel).getModel(t))
			}
		},
		getLevelModel: function() {
			return (this.hostTree.levelModels || [])[this.depth]
		},
		getLeavesModel: function() {
			return this.hostTree.leavesModel
		},
		setVisual: function(t, e) {
			0 <= this.dataIndex && this.hostTree.data.setItemVisual(this.dataIndex, t, e)
		},
		getVisual: function(t, e) {
			return this.hostTree.data.getItemVisual(this.dataIndex, t, e)
		},
		getRawIndex: function() {
			return this.hostTree.data.getRawIndex(this.dataIndex)
		},
		getId: function() {
			return this.hostTree.data.getId(this.dataIndex)
		},
		isAncestorOf: function(t) {
			for (var e = t.parentNode; e;) {
				if (e === this) return !0;
				e = e.parentNode
			}
			return !1
		},
		isDescendantOf: function(t) {
			return t !== this && t.isAncestorOf(this)
		}
	}, Ky.prototype = {
		constructor: Ky,
		type: "tree",
		eachNode: function(t, e, i) {
			this.root.eachNode(t, e, i)
		},
		getNodeByDataIndex: function(t) {
			var e = this.data.getRawIndex(t);
			return this._nodes[e]
		},
		getNodeByName: function(t) {
			return this.root.getNodeByName(t)
		},
		update: function() {
			for (var t = this.data, e = this._nodes, i = 0, n = e.length; i < n; i++) e[i].dataIndex = -1;
			for (i = 0, n = t.count(); i < n; i++) e[t.getRawIndex(i)].dataIndex = i
		},
		clearLayouts: function() {
			this.data.clearItemLayouts()
		}
	}, Ky.createTree = function(t, e, i) {
		var s = new Ky(e, i.levels, i.leaves),
			l = [],
			u = 1;
		! function t(e, i) {
			var n = e.value;
			u = Math.max(u, k(n) ? n.length : 1);
			l.push(e);
			var a = new qy(e.name, s);
			i ? $y(a, i) : s.root = a;
			s._nodes.push(a);
			var o = e.children;
			if (o)
				for (var r = 0; r < o.length; r++) t(o[r], a)
		}(t), s.root.updateDepthAndHeight(0);
		var n = Wf(l, {
				coordDimensions: ["value"],
				dimensionsCount: u
			}),
			a = new Tf(n, e);
		return a.initData(l), Wy({
			mainData: a,
			struct: s,
			structAttr: "tree"
		}), s.update(), s
	}, Wh.extend({
		type: "series.tree",
		layoutInfo: null,
		layoutMode: "box",
		getInitialData: function(t) {
			var e = {
					name: t.name,
					children: t.data
				},
				i = t.leaves || {},
				n = {};
			n.leaves = i;
			var a = Ky.createTree(e, this, n),
				o = 0;
			a.eachNode("preorder", function(t) {
				t.depth > o && (o = t.depth)
			});
			var r = t.expandAndCollapse && 0 <= t.initialTreeDepth ? t.initialTreeDepth : o;
			return a.root.eachNode("preorder", function(t) {
				var e = t.hostTree.data.getRawDataItem(t.dataIndex);
				t.isExpand = e && null != e.collapsed ? !e.collapsed : t.depth <= r
			}), a.data
		},
		getOrient: function() {
			var t = this.get("orient");
			return "horizontal" === t ? t = "LR" : "vertical" === t && (t = "TB"), t
		},
		setZoom: function(t) {
			this.option.zoom = t
		},
		setCenter: function(t) {
			this.option.center = t
		},
		formatTooltip: function(t) {
			for (var e = this.getData().tree, i = e.root.children[0], n = e.getNodeByDataIndex(t), a = n.getValue(), o = n.name; n &&
				n !== i;) o = n.parentNode.name + "." + o, n = n.parentNode;
			return Wl(o + (isNaN(a) || null == a ? "" : " : " + a))
		},
		defaultOption: {
			zlevel: 0,
			z: 2,
			coordinateSystem: "view",
			left: "12%",
			top: "12%",
			right: "12%",
			bottom: "12%",
			layout: "orthogonal",
			roam: !1,
			nodeScaleRatio: .4,
			center: null,
			zoom: 1,
			orient: "LR",
			symbol: "emptyCircle",
			symbolSize: 7,
			expandAndCollapse: !0,
			initialTreeDepth: 2,
			lineStyle: {
				color: "#ccc",
				width: 1.5,
				curveness: .5
			},
			itemStyle: {
				color: "lightsteelblue",
				borderColor: "#009688",
				borderWidth: 1.5
			},
			label: {
				show: !0,
				color: "#555"
			},
			leaves: {
				label: {
					show: !0
				}
			},
			animationEasing: "linear",
			animationDuration: 700,
			animationDurationUpdate: 1e3
		}
	}), hf({
		type: "tree",
		init: function(t, e) {
			this._oldTree, this._mainGroup = new Si, this._controller = new uy(e.getZr()), this._controllerHost = {
				target: this.group
			}, this.group.add(this._mainGroup)
		},
		render: function(n, t, i, e) {
			var a = n.getData(),
				o = n.layoutInfo,
				r = this._mainGroup,
				s = n.get("layout");
			"radial" === s ? r.attr("position", [o.x + o.width / 2, o.y + o.height / 2]) : r.attr("position", [o.x, o.y]),
				this._updateViewCoordSys(n, o, s), this._updateController(n, t, i);
			var l = this._data,
				u = {
					expandAndCollapse: n.get("expandAndCollapse"),
					layout: s,
					orient: n.getOrient(),
					curvature: n.get("lineStyle.curveness"),
					symbolRotate: n.get("symbolRotate"),
					symbolOffset: n.get("symbolOffset"),
					hoverAnimation: n.get("hoverAnimation"),
					useNameLabel: !0,
					fadeIn: !0
				};
			a.diff(l).add(function(t) {
					rx(a, t) && lx(a, t, null, r, n, u)
				}).update(function(t, e) {
					var i = l.getItemGraphicEl(e);
					rx(a, t) ? lx(a, t, i, r, n, u) : i && ux(l, e, i, r, n, u)
				}).remove(function(t) {
					var e = l.getItemGraphicEl(t);
					e && ux(l, t, e, r, n, u)
				}).execute(), this._nodeScaleRatio = n.get("nodeScaleRatio"), this._updateNodeAndLinkScale(n), !0 === u.expandAndCollapse &&
				a.eachItemGraphicEl(function(t, e) {
					t.off("click").on("click", function() {
						i.dispatchAction({
							type: "treeExpandAndCollapse",
							seriesId: n.id,
							dataIndex: e
						})
					})
				}), this._data = a
		},
		_updateViewCoordSys: function(t) {
			var i = t.getData(),
				n = [];
			i.each(function(t) {
				var e = i.getItemLayout(t);
				!e || isNaN(e.x) || isNaN(e.y) || n.push([+e.x, +e.y])
			});
			var e = [],
				a = [];
			Io(n, e, a);
			var o = this._min,
				r = this._max;
			a[0] - e[0] == 0 && (e[0] = o ? o[0] : e[0] - 1, a[0] = r ? r[0] : a[0] + 1), a[1] - e[1] == 0 && (e[1] = o ? o[
				1] : e[1] - 1, a[1] = r ? r[1] : a[1] + 1);
			var s = t.coordinateSystem = new Py;
			s.zoomLimit = t.get("scaleLimit"), s.setBoundingRect(e[0], e[1], a[0] - e[0], a[1] - e[1]), s.setCenter(t.get(
				"center")), s.setZoom(t.get("zoom")), this.group.attr({
				position: s.position,
				scale: s.scale
			}), this._viewCoordSys = s, this._min = e, this._max = a
		},
		_updateController: function(a, t, o) {
			var e = this._controller,
				i = this._controllerHost,
				r = this.group;
			e.setPointerChecker(function(t, e, i) {
				var n = r.getBoundingRect();
				return n.applyTransform(r.transform), n.contain(e, i) && !wy(t, o, a)
			}), e.enable(a.get("roam")), i.zoomLimit = a.get("scaleLimit"), i.zoom = a.coordinateSystem.getZoom(), e.off(
				"pan").off("zoom").on("pan", function(t) {
				yy(i, t.dx, t.dy), o.dispatchAction({
					seriesId: a.id,
					type: "treeRoam",
					dx: t.dx,
					dy: t.dy
				})
			}, this).on("zoom", function(t) {
				xy(i, t.scale, t.originX, t.originY), o.dispatchAction({
					seriesId: a.id,
					type: "treeRoam",
					zoom: t.scale,
					originX: t.originX,
					originY: t.originY
				}), this._updateNodeAndLinkScale(a)
			}, this)
		},
		_updateNodeAndLinkScale: function(t) {
			var e = t.getData(),
				i = this._getNodeGlobalScale(t),
				n = [i, i];
			e.eachItemGraphicEl(function(t, e) {
				t.attr("scale", n)
			})
		},
		_getNodeGlobalScale: function(t) {
			var e = t.coordinateSystem;
			if ("view" !== e.type) return 1;
			var i = this._nodeScaleRatio,
				n = e.scale,
				a = n && n[0] || 1;
			return ((e.getZoom() - 1) * i + 1) / a
		},
		dispose: function() {
			this._controller && this._controller.dispose(), this._controllerHost = {}
		},
		remove: function() {
			this._mainGroup.removeAll(), this._data = null
		}
	}), tf({
		type: "treeExpandAndCollapse",
		event: "treeExpandAndCollapse",
		update: "update"
	}, function(n, t) {
		t.eachComponent({
			mainType: "series",
			subType: "tree",
			query: n
		}, function(t) {
			var e = n.dataIndex,
				i = t.getData().tree.getNodeByDataIndex(e);
			i.isExpand = !i.isExpand
		})
	}), tf({
		type: "treeRoam",
		event: "treeRoam",
		update: "none"
	}, function(i, t) {
		t.eachComponent({
			mainType: "series",
			subType: "tree",
			query: i
		}, function(t) {
			var e = Cy(t.coordinateSystem, i);
			t.setCenter && t.setCenter(e.center), t.setZoom && t.setZoom(e.zoom)
		})
	});

	function dx(t, e, i) {
		if (t && 0 <= _(e, t.type)) {
			var n = i.getData().tree.root,
				a = t.targetNode;
			if ("string" == typeof a && (a = n.getNodeById(a)), a && n.contains(a)) return {
				node: a
			};
			var o = t.targetNodeId;
			if (null != o && (a = n.getNodeById(o))) return {
				node: a
			}
		}
	}

	function fx(t) {
		for (var e = []; t;)(t = t.parentNode) && e.push(t);
		return e.reverse()
	}

	function px(t, e) {
		return 0 <= _(fx(t), e)
	}

	function gx(t, e) {
		for (var i = []; t;) {
			var n = t.dataIndex;
			i.push({
				name: t.name,
				dataIndex: n,
				value: e.getRawValue(n)
			}), t = t.parentNode
		}
		return i.reverse(), i
	}
	af(rm("tree", "circle")), nf(function(t, e) {
		t.eachSeriesByType("tree", function(t) {
			! function(t, e) {
				var i = function(t, e) {
					return au(t.getBoxLayoutParams(), {
						width: e.getWidth(),
						height: e.getHeight()
					})
				}(t, e);
				t.layoutInfo = i;
				var n = t.get("layout"),
					a = 0,
					o = 0,
					r = null;
				r = "radial" === n ? (a = 2 * Math.PI, o = Math.min(i.height, i.width) / 2, tx(function(t, e) {
					return (t.parentNode === e.parentNode ? 1 : 2) / t.depth
				})) : (a = i.width, o = i.height, tx());
				var s = t.getData().tree.root,
					l = s.children[0];
				if (l) {
					! function(t) {
						t.hierNode = {
							defaultAncestor: null,
							ancestor: t,
							prelim: 0,
							modifier: 0,
							change: 0,
							shift: 0,
							i: 0,
							thread: null
						};
						for (var e, i, n = [t]; e = n.pop();)
							if (i = e.children, e.isExpand && i.length)
								for (var a = i.length - 1; 0 <= a; a--) {
									var o = i[a];
									o.hierNode = {
										defaultAncestor: null,
										ancestor: o,
										prelim: 0,
										modifier: 0,
										change: 0,
										shift: 0,
										i: a,
										thread: null
									}, n.push(o)
								}
					}(s),
					function(t, e, i) {
						for (var n, a = [t], o = []; n = a.pop();)
							if (o.push(n), n.isExpand) {
								var r = n.children;
								if (r.length)
									for (var s = 0; s < r.length; s++) a.push(r[s])
							}
						for (; n = o.pop();) e(n, i)
					}(l, Jy, r), s.hierNode.modifier = -l.hierNode.prelim, cx(l, Qy);
					var u = l,
						h = l,
						c = l;
					cx(l, function(t) {
						var e = t.getLayout().x;
						e < u.getLayout().x && (u = t), e > h.getLayout().x && (h = t), t.depth > c.depth && (c = t)
					});
					var d = u === h ? 1 : r(u, h) / 2,
						f = d - u.getLayout().x,
						p = 0,
						g = 0,
						m = 0,
						v = 0;
					if ("radial" === n) p = a / (h.getLayout().x + d + f), g = o / (c.depth - 1 || 1), cx(l, function(t) {
						m = (t.getLayout().x + f) * p, v = (t.depth - 1) * g;
						var e = ex(m, v);
						t.setLayout({
							x: e.x,
							y: e.y,
							rawX: m,
							rawY: v
						}, !0)
					});
					else {
						var y = t.getOrient();
						"RL" === y || "LR" === y ? (g = o / (h.getLayout().x + d + f), p = a / (c.depth - 1 || 1), cx(l, function(t) {
							v = (t.getLayout().x + f) * g, m = "LR" === y ? (t.depth - 1) * p : a - (t.depth - 1) * p, t.setLayout({
								x: m,
								y: v
							}, !0)
						})) : "TB" !== y && "BT" !== y || (p = a / (h.getLayout().x + d + f), g = o / (c.depth - 1 || 1), cx(l,
							function(t) {
								m = (t.getLayout().x + f) * p, v = "TB" === y ? (t.depth - 1) * g : o - (t.depth - 1) * g, t.setLayout({
									x: m,
									y: v
								}, !0)
							}))
					}
				}
			}(t, e)
		})
	}), Wh.extend({
		type: "series.treemap",
		layoutMode: "box",
		dependencies: ["grid", "polar"],
		preventUsingHoverLayer: !0,
		_viewRoot: null,
		defaultOption: {
			progressive: 0,
			left: "center",
			top: "middle",
			right: null,
			bottom: null,
			width: "80%",
			height: "80%",
			sort: !0,
			clipWindow: "origin",
			squareRatio: .5 * (1 + Math.sqrt(5)),
			leafDepth: null,
			drillDownIcon: "▶",
			zoomToNodeRatio: .1024,
			roam: !0,
			nodeClick: "zoomToNode",
			animation: !0,
			animationDurationUpdate: 900,
			animationEasing: "quinticInOut",
			breadcrumb: {
				show: !0,
				height: 22,
				left: "center",
				top: "bottom",
				emptyItemWidth: 25,
				itemStyle: {
					color: "rgba(0,0,0,0.7)",
					borderColor: "rgba(255,255,255,0.7)",
					borderWidth: 1,
					shadowColor: "rgba(150,150,150,1)",
					shadowBlur: 3,
					shadowOffsetX: 0,
					shadowOffsetY: 0,
					textStyle: {
						color: "#fff"
					}
				},
				emphasis: {
					textStyle: {}
				}
			},
			label: {
				show: !0,
				distance: 0,
				padding: 5,
				position: "inside",
				color: "#fff",
				ellipsis: !0
			},
			upperLabel: {
				show: !1,
				position: [0, "50%"],
				height: 20,
				color: "#fff",
				ellipsis: !0,
				verticalAlign: "middle"
			},
			itemStyle: {
				color: null,
				colorAlpha: null,
				colorSaturation: null,
				borderWidth: 0,
				gapWidth: 0,
				borderColor: "#fff",
				borderColorSaturation: null
			},
			emphasis: {
				upperLabel: {
					show: !0,
					position: [0, "50%"],
					color: "#fff",
					ellipsis: !0,
					verticalAlign: "middle"
				}
			},
			visualDimension: 0,
			visualMin: null,
			visualMax: null,
			color: [],
			colorAlpha: null,
			colorSaturation: null,
			colorMappingBy: "index",
			visibleMin: 10,
			childrenVisibleMin: null,
			levels: []
		},
		getInitialData: function(t, e) {
			var i = {
				name: t.name,
				children: t.data
			};
			! function i(t) {
				var n = 0;
				E(t.children, function(t) {
					i(t);
					var e = t.value;
					k(e) && (e = e[0]), n += e
				});
				var e = t.value;
				k(e) && (e = e[0]);
				null != e && !isNaN(e) || (e = n);
				e < 0 && (e = 0);
				k(t.value) ? t.value[0] = e : t.value = e
			}(i);
			var n = t.levels || [];
			n = t.levels = function(t, e) {
				var n, i = e.get("color");
				if (!i) return;
				if (E(t = t || [], function(t) {
						var e = new dl(t),
							i = e.get("color");
						(e.get("itemStyle.color") || i && "none" !== i) && (n = !0)
					}), !n) {
					(t[0] || (t[0] = {})).color = i.slice()
				}
				return t
			}(n, e);
			var a = {};
			return a.levels = n, Ky.createTree(i, this, a).data
		},
		optionUpdated: function() {
			this.resetViewRoot()
		},
		formatTooltip: function(t) {
			var e = this.getData(),
				i = this.getRawValue(t),
				n = k(i) ? zl(i[0]) : zl(i);
			return Wl(e.getName(t) + ": " + n)
		},
		getDataParams: function(t) {
			var e = Wh.prototype.getDataParams.apply(this, arguments),
				i = this.getData().tree.getNodeByDataIndex(t);
			return e.treePathInfo = gx(i, this), e
		},
		setLayoutInfo: function(t) {
			this.layoutInfo = this.layoutInfo || {}, L(this.layoutInfo, t)
		},
		mapIdToIndex: function(t) {
			var e = this._idIndexMap;
			e || (e = this._idIndexMap = Q(), this._idIndexMapCount = 0);
			var i = e.get(t);
			return null == i && e.set(t, i = this._idIndexMapCount++), i
		},
		getViewRoot: function() {
			return this._viewRoot
		},
		resetViewRoot: function(t) {
			t ? this._viewRoot = t : t = this._viewRoot;
			var e = this.getRawData().tree.root;
			t && (t === e || e.contains(t)) || (this._viewRoot = e)
		}
	});
	var mx = 5;

	function vx(t) {
		this.group = new Si, t.add(this.group)
	}

	function yx(t, e, i, n, a, o) {
		var r = [
			[a ? t : t - mx, e],
			[t + i, e],
			[t + i, e + n],
			[a ? t : t - mx, e + n]
		];
		return o || r.splice(2, 0, [t + i + mx, e + n / 2]), a || r.push([t, e + n / 2]), r
	}
	vx.prototype = {
		constructor: vx,
		render: function(t, e, i, n) {
			var a = t.getModel("breadcrumb"),
				o = this.group;
			if (o.removeAll(), a.get("show") && i) {
				var r = a.getModel("itemStyle"),
					s = r.getModel("textStyle"),
					l = {
						pos: {
							left: a.get("left"),
							right: a.get("right"),
							top: a.get("top"),
							bottom: a.get("bottom")
						},
						box: {
							width: e.getWidth(),
							height: e.getHeight()
						},
						emptyItemWidth: a.get("emptyItemWidth"),
						totalWidth: 0,
						renderList: []
					};
				this._prepare(i, l, s), this._renderContent(t, l, r, s, n), ou(o, l.pos, l.box)
			}
		},
		_prepare: function(t, e, i) {
			for (var n = t; n; n = n.parentNode) {
				var a = n.getModel().get("name"),
					o = i.getTextRect(a),
					r = Math.max(o.width + 16, e.emptyItemWidth);
				e.totalWidth += r + 8, e.renderList.push({
					node: n,
					text: a,
					width: r
				})
			}
		},
		_renderContent: function(t, e, i, n, a) {
			for (var o, r, s = 0, l = e.emptyItemWidth, u = t.get("breadcrumb.height"), h = function(t, e, i) {
					var n = e.width,
						a = e.height,
						o = xl(t.x, n),
						r = xl(t.y, a),
						s = xl(t.x2, n),
						l = xl(t.y2, a);
					return (isNaN(o) || isNaN(parseFloat(t.x))) && (o = 0), (isNaN(s) || isNaN(parseFloat(t.x2))) && (s = n), (
						isNaN(r) || isNaN(parseFloat(t.y))) && (r = 0), (isNaN(l) || isNaN(parseFloat(t.y2))) && (l = a), i = Vl(i ||
						0), {
						width: Math.max(s - o - i[1] - i[3], 0),
						height: Math.max(l - r - i[0] - i[2], 0)
					}
				}(e.pos, e.box), c = e.totalWidth, d = e.renderList, f = d.length - 1; 0 <= f; f--) {
				var p = d[f],
					g = p.node,
					m = p.width,
					v = p.text;
				c > h.width && (c -= m - l, m = l, v = null);
				var y = new Rr({
					shape: {
						points: yx(s, 0, m, u, f === d.length - 1, 0 === f)
					},
					style: C(i.getItemStyle(), {
						lineJoin: "bevel",
						text: v,
						textFill: n.getTextColor(),
						textFont: n.getFont()
					}),
					z: 10,
					onclick: A(a, g)
				});
				this.group.add(y), o = t, r = g, y.eventData = {
					componentType: "series",
					componentSubType: "treemap",
					componentIndex: o.componentIndex,
					seriesIndex: o.componentIndex,
					seriesName: o.name,
					seriesType: "treemap",
					selfType: "breadcrumb",
					nodeData: {
						dataIndex: r && r.dataIndex,
						name: r && r.name
					},
					treePathInfo: r && gx(r, o)
				}, s += m + 8
			}
		},
		remove: function() {
			this.group.removeAll()
		}
	};

	function xx(t) {
		var e = Lx(t);
		return e.stroke = e.fill = e.lineWidth = null, e
	}
	var _x = T,
		bx = Si,
		Sx = Hr,
		Mx = E,
		Ix = ["label"],
		Ax = ["emphasis", "label"],
		Tx = ["upperLabel"],
		Dx = ["emphasis", "upperLabel"],
		Cx = 10,
		Lx = Xa([
			["fill", "color"],
			["stroke", "strokeColor"],
			["lineWidth", "strokeWidth"],
			["shadowBlur"],
			["shadowOffsetX"],
			["shadowOffsetY"],
			["shadowColor"]
		]);

	function kx(d, r, s, l, u, i, f, t, e, n) {
		if (f) {
			var p = f.getLayout();
			if (p && p.isInView) {
				var h = p.width,
					c = p.height,
					g = p.borderWidth,
					m = p.invisible,
					v = f.getRawIndex(),
					y = t && t.getRawIndex(),
					a = f.viewChildren,
					x = p.upperHeight,
					o = a && a.length,
					_ = f.getModel("itemStyle"),
					w = f.getModel("emphasis.itemStyle"),
					b = T("nodeGroup", bx);
				if (b) {
					if (e.add(b), b.attr("position", [p.x || 0, p.y || 0]), b.__tmNodeWidth = h, b.__tmNodeHeight = c, p.isAboveViewRoot)
						return b;
					var S = T("background", Sx, n, 1);
					if (S && function(t, n, a) {
							n.dataIndex = f.dataIndex, n.seriesIndex = d.seriesIndex, n.setShape({
								x: 0,
								y: 0,
								width: h,
								height: c
							});
							var o = f.getVisual("borderColor", !0),
								r = w.get("borderColor");
							I(n, function() {
								var t = xx(_);
								t.fill = o;
								var e = Lx(w);
								if (e.fill = r, a) {
									var i = h - 2 * g;
									A(t, e, o, i, x, {
										x: g,
										y: 0,
										width: i,
										height: x
									})
								} else t.text = e.text = null;
								n.setStyle(t), Os(n, e)
							}), t.add(n)
						}(b, S, o && p.upperHeight), !o) {
						var M = T("content", Sx, n, 2);
						M && function(t, i) {
							i.dataIndex = f.dataIndex, i.seriesIndex = d.seriesIndex;
							var n = Math.max(h - 2 * g, 0),
								a = Math.max(c - 2 * g, 0);
							i.culling = !0, i.setShape({
								x: g,
								y: g,
								width: n,
								height: a
							});
							var o = f.getVisual("color", !0);
							I(i, function() {
								var t = xx(_);
								t.fill = o;
								var e = Lx(w);
								A(t, e, o, n, a), i.setStyle(t), Os(i, e)
							}), t.add(i)
						}(b, M)
					}
					return b
				}
			}
		}

		function I(t, e) {
			m ? t.invisible || i.push(t) : (e(), t.__tmWillVisible || (t.invisible = !1))
		}

		function A(t, e, i, n, a, o) {
			var r = f.getModel(),
				s = W(d.getFormattedLabel(f.dataIndex, "normal", null, null, o ? "upperLabel" : "label"), r.get("name"));
			if (!o && p.isLeafRoot) {
				var l = d.get("drillDownIcon", !0);
				s = l ? l + " " + s : s
			}
			var u = r.getModel(o ? Tx : Ix),
				h = r.getModel(o ? Dx : Ax),
				c = u.getShallow("show");
			Bs(t, e, u, h, {
				defaultText: c ? s : null,
				autoColor: i,
				isRectText: !0
			}), o && (t.textRect = D(o)), t.truncate = c && u.get("ellipsis") ? {
				outerWidth: n,
				outerHeight: a,
				minChar: 2
			} : null
		}

		function T(t, e, i, n) {
			var a = null != y && s[t][y],
				o = u[t];
			return a ? (s[t][y] = null, function(t, e, i) {
				(t[v] = {}).old = "nodeGroup" === i ? e.position.slice() : L({}, e.shape)
			}(o, a, t)) : m || ((a = new e({
				z: function(t, e) {
					var i = t * Cx + e;
					return (i - 1) / i
				}(i, n)
			})).__tmDepth = i, function(t, e, i) {
				var n = t[v] = {},
					a = f.parentNode;
				if (a && (!l || "drillDown" === l.direction)) {
					var o = 0,
						r = 0,
						s = u.background[a.getRawIndex()];
					!l && s && s.old && (o = s.old.width, r = s.old.height), n.old = "nodeGroup" === i ? [0, r] : {
						x: o,
						y: r,
						width: 0,
						height: 0
					}
				}
				n.fadein = "nodeGroup" !== i
			}(o, 0, a.__tmStorageName = t)), r[t][v] = a
		}
	}
	hf({
		type: "treemap",
		init: function(t, e) {
			this._containerGroup, this._storage = {
				nodeGroup: [],
				background: [],
				content: []
			}, this._oldTree, this._breadcrumb, this._controller, this._state = "ready"
		},
		render: function(t, e, i, n) {
			if (!(_(e.findComponents({
					mainType: "series",
					subType: "treemap",
					query: n
				}), t) < 0)) {
				this.seriesModel = t, this.api = i, this.ecModel = e;
				var a = dx(n, ["treemapZoomToNode", "treemapRootToNode"], t),
					o = n && n.type,
					r = t.layoutInfo,
					s = !this._oldTree,
					l = this._storage,
					u = "treemapRootToNode" === o && a && l ? {
						rootNodeGroup: l.nodeGroup[a.node.getRawIndex()],
						direction: n.direction
					} : null,
					h = this._giveContainerGroup(r),
					c = this._doRender(h, t, u);
				s || o && "treemapZoomToNode" !== o && "treemapRootToNode" !== o ? c.renderFinally() : this._doAnimation(h, c,
					t, u), this._resetController(i), this._renderBreadcrumb(t, i, a)
			}
		},
		_giveContainerGroup: function(t) {
			var e = this._containerGroup;
			return e || (e = this._containerGroup = new bx, this._initEvents(e), this.group.add(e)), e.attr("position", [t.x,
				t.y
			]), e
		},
		_doRender: function(t, e, i) {
			var n = e.getData().tree,
				a = this._oldTree,
				o = {
					nodeGroup: [],
					background: [],
					content: []
				},
				r = {
					nodeGroup: [],
					background: [],
					content: []
				},
				s = this._storage,
				l = [],
				c = A(kx, e, r, s, i, o, l);
			! function o(r, s, l, u, h) {
				u ? Mx(s = r, function(t, e) {
					t.isRemoved() || i(e, e)
				}) : new df(s, r, t, t).add(i).update(i).remove(A(i, null)).execute();

				function t(t) {
					return t.getId()
				}

				function i(t, e) {
					var i = null != t ? r[t] : null,
						n = null != e ? s[e] : null,
						a = c(i, n, l, h);
					a && o(i && i.viewChildren || [], n && n.viewChildren || [], a, u, h + 1)
				}
			}(n.root ? [n.root] : [], a && a.root ? [a.root] : [], t, n === a || !a, 0);
			var u, h, d = (h = {
				nodeGroup: [],
				background: [],
				content: []
			}, (u = s) && Mx(u, function(t, e) {
				var i = h[e];
				Mx(t, function(t) {
					t && (i.push(t), t.__tmWillDelete = 1)
				})
			}), h);
			return this._oldTree = n, this._storage = r, {
				lastsForAnimation: o,
				willDeleteEls: d,
				renderFinally: function() {
					Mx(d, function(t) {
						Mx(t, function(t) {
							t.parent && t.parent.remove(t)
						})
					}), Mx(l, function(t) {
						t.invisible = !0, t.dirty()
					})
				}
			}
		},
		_doAnimation: function(t, o, e, s) {
			if (e.get("animation")) {
				var l = e.get("animationDurationUpdate"),
					u = e.get("animationEasing"),
					h = function() {
						var o, r = [],
							s = {};
						return {
							add: function(t, e, i, n, a) {
								return R(n) && (a = n, n = 0), !s[t.id] && (s[t.id] = 1, r.push({
									el: t,
									target: e,
									time: i,
									delay: n,
									easing: a
								}), !0)
							},
							done: function(t) {
								return o = t, this
							},
							start: function() {
								for (var t = r.length, e = 0, i = r.length; e < i; e++) {
									var n = r[e];
									n.el.animateTo(n.target, n.time, n.delay, n.easing, a)
								}
								return this;

								function a() {
									--t || (r.length = 0, s = {}, o && o())
								}
							}
						}
					}();
				Mx(o.willDeleteEls, function(t, r) {
					Mx(t, function(t, e) {
						if (!t.invisible) {
							var i, n = t.parent;
							if (s && "drillDown" === s.direction) i = n === s.rootNodeGroup ? {
								shape: {
									x: 0,
									y: 0,
									width: n.__tmNodeWidth,
									height: n.__tmNodeHeight
								},
								style: {
									opacity: 0
								}
							} : {
								style: {
									opacity: 0
								}
							};
							else {
								var a = 0,
									o = 0;
								n.__tmWillDelete || (a = n.__tmNodeWidth / 2, o = n.__tmNodeHeight / 2), i = "nodeGroup" === r ? {
									position: [a, o],
									style: {
										opacity: 0
									}
								} : {
									shape: {
										x: a,
										y: o,
										width: 0,
										height: 0
									},
									style: {
										opacity: 0
									}
								}
							}
							i && h.add(t, i, l, u)
						}
					})
				}), Mx(this._storage, function(t, a) {
					Mx(t, function(t, e) {
						var i = o.lastsForAnimation[a][e],
							n = {};
						i && ("nodeGroup" === a ? i.old && (n.position = t.position.slice(), t.attr("position", i.old)) : (i.old &&
							(n.shape = L({}, t.shape), t.setShape(i.old)), i.fadein ? (t.setStyle("opacity", 0), n.style = {
								opacity: 1
							}) : 1 !== t.style.opacity && (n.style = {
								opacity: 1
							})), h.add(t, n, l, u))
					})
				}, this), this._state = "animating", h.done(_x(function() {
					this._state = "ready", o.renderFinally()
				}, this)).start()
			}
		},
		_resetController: function(t) {
			var e = this._controller;
			e || ((e = this._controller = new uy(t.getZr())).enable(this.seriesModel.get("roam")), e.on("pan", _x(this._onPan,
				this)), e.on("zoom", _x(this._onZoom, this)));
			var n = new bi(0, 0, t.getWidth(), t.getHeight());
			e.setPointerChecker(function(t, e, i) {
				return n.contain(e, i)
			})
		},
		_clearController: function() {
			var t = this._controller;
			t && (t.dispose(), t = null)
		},
		_onPan: function(t) {
			if ("animating" !== this._state && (3 < Math.abs(t.dx) || 3 < Math.abs(t.dy))) {
				var e = this.seriesModel.getData().tree.root;
				if (!e) return;
				var i = e.getLayout();
				if (!i) return;
				this.api.dispatchAction({
					type: "treemapMove",
					from: this.uid,
					seriesId: this.seriesModel.id,
					rootRect: {
						x: i.x + t.dx,
						y: i.y + t.dy,
						width: i.width,
						height: i.height
					}
				})
			}
		},
		_onZoom: function(t) {
			var e = t.originX,
				i = t.originY;
			if ("animating" !== this._state) {
				var n = this.seriesModel.getData().tree.root;
				if (!n) return;
				var a = n.getLayout();
				if (!a) return;
				var o = new bi(a.x, a.y, a.width, a.height),
					r = this.seriesModel.layoutInfo;
				e -= r.x, i -= r.y;
				var s = Qt();
				ne(s, s, [-e, -i]), oe(s, s, [t.scale, t.scale]), ne(s, s, [e, i]), o.applyTransform(s), this.api.dispatchAction({
					type: "treemapRender",
					from: this.uid,
					seriesId: this.seriesModel.id,
					rootRect: {
						x: o.x,
						y: o.y,
						width: o.width,
						height: o.height
					}
				})
			}
		},
		_initEvents: function(t) {
			t.on("click", function(t) {
				if ("ready" === this._state) {
					var e = this.seriesModel.get("nodeClick", !0);
					if (e) {
						var i = this.findTarget(t.offsetX, t.offsetY);
						if (i) {
							var n = i.node;
							if (n.getLayout().isLeafRoot) this._rootToNode(i);
							else if ("zoomToNode" === e) this._zoomToNode(i);
							else if ("link" === e) {
								var a = n.hostTree.data.getItemModel(n.dataIndex),
									o = a.get("link", !0),
									r = a.get("target", !0) || "blank";
								o && window.open(o, r)
							}
						}
					}
				}
			}, this)
		},
		_renderBreadcrumb: function(e, t, i) {
			i = i || ((i = null != e.get("leafDepth", !0) ? {
				node: e.getViewRoot()
			} : this.findTarget(t.getWidth() / 2, t.getHeight() / 2)) || {
				node: e.getData().tree.root
			}), (this._breadcrumb || (this._breadcrumb = new vx(this.group))).render(e, t, i.node, _x(function(t) {
				"animating" !== this._state && (px(e.getViewRoot(), t) ? this._rootToNode({
					node: t
				}) : this._zoomToNode({
					node: t
				}))
			}, this))
		},
		remove: function() {
			this._clearController(), this._containerGroup && this._containerGroup.removeAll(), this._storage = {
				nodeGroup: [],
				background: [],
				content: []
			}, this._state = "ready", this._breadcrumb && this._breadcrumb.remove()
		},
		dispose: function() {
			this._clearController()
		},
		_zoomToNode: function(t) {
			this.api.dispatchAction({
				type: "treemapZoomToNode",
				from: this.uid,
				seriesId: this.seriesModel.id,
				targetNode: t.node
			})
		},
		_rootToNode: function(t) {
			this.api.dispatchAction({
				type: "treemapRootToNode",
				from: this.uid,
				seriesId: this.seriesModel.id,
				targetNode: t.node
			})
		},
		findTarget: function(a, o) {
			var r;
			return this.seriesModel.getViewRoot().eachNode({
				attr: "viewChildren",
				order: "preorder"
			}, function(t) {
				var e = this._storage.background[t.getRawIndex()];
				if (e) {
					var i = e.transformCoordToLocal(a, o),
						n = e.shape;
					if (!(n.x <= i[0] && i[0] <= n.x + n.width && n.y <= i[1] && i[1] <= n.y + n.height)) return !1;
					r = {
						node: t,
						offsetX: i[0],
						offsetY: i[1]
					}
				}
			}, this), r
		}
	});
	for (var Px = function() {}, Nx = ["treemapZoomToNode", "treemapRender", "treemapMove"], Ox = 0; Ox < Nx.length; Ox++)
		tf({
			type: Nx[Ox],
			update: "updateView"
		}, Px);
	tf({
		type: "treemapRootToNode",
		update: "updateView"
	}, function(a, t) {
		t.eachComponent({
			mainType: "series",
			subType: "treemap",
			query: a
		}, function(t, e) {
			var i = dx(a, ["treemapZoomToNode", "treemapRootToNode"], t);
			if (i) {
				var n = t.getViewRoot();
				n && (a.direction = px(n, i.node) ? "rollUp" : "drillDown"), t.resetViewRoot(i.node)
			}
		})
	});
	var Ex = E,
		Rx = z,
		zx = -1,
		Bx = function(t) {
			var e = t.mappingMethod,
				i = t.type,
				n = this.option = D(t);
			this.type = i, this.mappingMethod = e, this._normalizeData = qx[e];
			var a = Vx[i];
			this.applyVisual = a.applyVisual, this.getColorMapper = a.getColorMapper, this._doMap = a._doMap[e], "piecewise" ===
				e ? (Gx(n), function(i) {
					var t = i.pieceList;
					i.hasSpecialVisual = !1, E(t, function(t, e) {
						t.originIndex = e, null != t.visual && (i.hasSpecialVisual = !0)
					})
				}(n)) : "category" === e ? n.categories ? function(t) {
					var e = t.categories,
						i = t.visual,
						n = t.categoryMap = {};
					if (Ex(e, function(t, e) {
							n[t] = e
						}), !k(i)) {
						var a = [];
						z(i) ? Ex(i, function(t, e) {
							var i = n[e];
							a[null != i ? i : zx] = t
						}) : a[zx] = i, i = jx(t, a)
					}
					for (var o = e.length - 1; 0 <= o; o--) null == i[o] && (delete n[e[o]], e.pop())
				}(n) : Gx(n, !0) : (Y("linear" !== e || n.dataExtent), Gx(n))
		};
	Bx.prototype = {
		constructor: Bx,
		mapValueToVisual: function(t) {
			var e = this._normalizeData(t);
			return this._doMap(e, t)
		},
		getNormalizer: function() {
			return T(this._normalizeData, this)
		}
	};
	var Vx = Bx.visualHandlers = {
		color: {
			applyVisual: Hx("color"),
			getColorMapper: function() {
				var a = this.option;
				return T("category" === a.mappingMethod ? function(t, e) {
					return e || (t = this._normalizeData(t)), Zx.call(this, t)
				} : function(t, e, i) {
					var n = !!i;
					return e || (t = this._normalizeData(t)), i = Ve(t, a.parsedVisual, i), n ? i : Ue(i, "rgba")
				}, this)
			},
			_doMap: {
				linear: function(t) {
					return Ue(Ve(t, this.option.parsedVisual), "rgba")
				},
				category: Zx,
				piecewise: function(t, e) {
					var i = Yx.call(this, e);
					return null == i && (i = Ue(Ve(t, this.option.parsedVisual), "rgba")), i
				},
				fixed: Ux
			}
		},
		colorHue: Fx(function(t, e) {
			return He(t, e)
		}),
		colorSaturation: Fx(function(t, e) {
			return He(t, null, e)
		}),
		colorLightness: Fx(function(t, e) {
			return He(t, null, null, e)
		}),
		colorAlpha: Fx(function(t, e) {
			return Ze(t, e)
		}),
		opacity: {
			applyVisual: Hx("opacity"),
			_doMap: Xx([0, 1])
		},
		liftZ: {
			applyVisual: Hx("liftZ"),
			_doMap: {
				linear: Ux,
				category: Ux,
				piecewise: Ux,
				fixed: Ux
			}
		},
		symbol: {
			applyVisual: function(t, e, i) {
				var n = this.mapValueToVisual(t);
				if (R(n)) i("symbol", n);
				else if (Rx(n))
					for (var a in n) n.hasOwnProperty(a) && i(a, n[a])
			},
			_doMap: {
				linear: Wx,
				category: Zx,
				piecewise: function(t, e) {
					var i = Yx.call(this, e);
					return null == i && (i = Wx.call(this, t)), i
				},
				fixed: Ux
			}
		},
		symbolSize: {
			applyVisual: Hx("symbolSize"),
			_doMap: Xx([0, 1])
		}
	};

	function Gx(t, e) {
		var i = t.visual,
			n = [];
		z(i) ? Ex(i, function(t) {
			n.push(t)
		}) : null != i && n.push(i);
		e || 1 !== n.length || {
			color: 1,
			symbol: 1
		}.hasOwnProperty(t.type) || (n[1] = n[0]), jx(t, n)
	}

	function Fx(n) {
		return {
			applyVisual: function(t, e, i) {
				t = this.mapValueToVisual(t), i("color", n(e("color"), t))
			},
			_doMap: Xx([0, 1])
		}
	}

	function Wx(t) {
		var e = this.option.visual;
		return e[Math.round(yl(t, [0, 1], [0, e.length - 1], !0))] || {}
	}

	function Hx(n) {
		return function(t, e, i) {
			i(n, this.mapValueToVisual(t))
		}
	}

	function Zx(t) {
		var e = this.option.visual;
		return e[this.option.loop && t !== zx ? t % e.length : t]
	}

	function Ux() {
		return this.option.visual[0]
	}

	function Xx(n) {
		return {
			linear: function(t) {
				return yl(t, n, this.option.visual, !0)
			},
			category: Zx,
			piecewise: function(t, e) {
				var i = Yx.call(this, e);
				return null == i && (i = yl(t, n, this.option.visual, !0)), i
			},
			fixed: Ux
		}
	}

	function Yx(t) {
		var e = this.option,
			i = e.pieceList;
		if (e.hasSpecialVisual) {
			var n = i[Bx.findPieceIndex(t, i)];
			if (n && n.visual) return n.visual[this.type]
		}
	}

	function jx(t, e) {
		return t.visual = e, "color" === t.type && (t.parsedVisual = N(e, function(t) {
			return Ee(t)
		})), e
	}
	var qx = {
		linear: function(t) {
			return yl(t, this.option.dataExtent, [0, 1], !0)
		},
		piecewise: function(t) {
			var e = this.option.pieceList,
				i = Bx.findPieceIndex(t, e, !0);
			if (null != i) return yl(i, [0, e.length - 1], [0, 1], !0)
		},
		category: function(t) {
			var e = this.option.categories ? this.option.categoryMap[t] : t;
			return null == e ? zx : e
		},
		fixed: et
	};

	function Kx(t, e, i) {
		return t ? e <= i : e < i
	}
	Bx.listVisualTypes = function() {
		var i = [];
		return E(Vx, function(t, e) {
			i.push(e)
		}), i
	}, Bx.addVisualHandler = function(t, e) {
		Vx[t] = e
	}, Bx.isValidType = function(t) {
		return Vx.hasOwnProperty(t)
	}, Bx.eachVisual = function(t, e, i) {
		z(t) ? E(t, e, i) : e.call(i, t)
	}, Bx.mapVisual = function(t, n, a) {
		var o, r = k(t) ? [] : z(t) ? {} : (o = !0, null);
		return Bx.eachVisual(t, function(t, e) {
			var i = n.call(a, t, e);
			o ? r = i : r[e] = i
		}), r
	}, Bx.retrieveVisuals = function(i) {
		var n, a = {};
		return i && Ex(Vx, function(t, e) {
			i.hasOwnProperty(e) && (a[e] = i[e], n = !0)
		}), n ? a : null
	}, Bx.prepareVisualTypes = function(t) {
		if (Rx(t)) {
			var i = [];
			Ex(t, function(t, e) {
				i.push(e)
			}), t = i
		} else {
			if (!k(t)) return [];
			t = t.slice()
		}
		return t.sort(function(t, e) {
			return "color" === e && "color" !== t && 0 === t.indexOf("color") ? 1 : -1
		}), t
	}, Bx.dependsOn = function(t, e) {
		return "color" === e ? !(!t || 0 !== t.indexOf(e)) : t === e
	}, Bx.findPieceIndex = function(n, t, e) {
		for (var a, o = 1 / 0, i = 0, r = t.length; i < r; i++) {
			var s = t[i].value;
			if (null != s) {
				if (s === n || "string" == typeof s && s === n + "") return i;
				e && c(s, i)
			}
		}
		for (i = 0, r = t.length; i < r; i++) {
			var l = t[i],
				u = l.interval,
				h = l.close;
			if (u) {
				if (u[0] === -1 / 0) {
					if (Kx(h[1], n, u[1])) return i
				} else if (u[1] === 1 / 0) {
					if (Kx(h[0], u[0], n)) return i
				} else if (Kx(h[0], u[0], n) && Kx(h[1], n, u[1])) return i;
				e && c(u[0], i), e && c(u[1], i)
			}
		}
		if (e) return n === 1 / 0 ? t.length - 1 : n === -1 / 0 ? 0 : a;

		function c(t, e) {
			var i = Math.abs(t - n);
			i < o && (o = i, a = e)
		}
	};
	var $x = k,
		Jx = "itemStyle",
		Qx = {
			seriesType: "treemap",
			reset: function(t, e, i, n) {
				var a = t.getData().tree,
					o = a.root,
					r = t.getModel(Jx);
				o.isRemoved() || ! function n(t, e, a, o, r, s) {
					var l = t.getModel();
					var i = t.getLayout();
					if (!i || i.invisible || !i.isInView) return;
					var u = t.getModel(Jx);
					var h = a[t.depth];
					var c = t_(u, e, h, o);
					var d = u.get("borderColor");
					var f = u.get("borderColorSaturation");
					var p;
					null != f && (p = e_(c), g = f, d = null != (m = p) ? He(m, null, null, g) : null);
					var g, m;
					t.setVisual("borderColor", d);
					var v = t.viewChildren;
					if (v && v.length) {
						var y = n_(t, l, i, u, c, v);
						E(v, function(t, e) {
							if (t.depth >= r.length || t === r[t.depth]) {
								var i = o_(l, c, t, e, y, s);
								n(t, i, a, o, r, s)
							}
						})
					} else p = e_(c), t.setVisual("color", p)
				}(o, {}, N(a.levelModels, function(t) {
					return t ? t.get(Jx) : null
				}), r, t.getViewRoot().getAncestors(), t)
			}
		};

	function t_(i, n, a, o) {
		var r = L({}, n);
		return E(["color", "colorAlpha", "colorSaturation"], function(t) {
			var e = i.get(t, !0);
			null == e && a && (e = a[t]), null == e && (e = n[t]), null == e && (e = o.get(t)), null != e && (r[t] = e)
		}), r
	}

	function e_(t) {
		var e = i_(t, "color");
		if (e) {
			var i = i_(t, "colorAlpha"),
				n = i_(t, "colorSaturation");
			return n && (e = He(e, null, null, n)), i && (e = Ze(e, i)), e
		}
	}

	function i_(t, e) {
		var i = t[e];
		if (null != i && "none" !== i) return i
	}

	function n_(t, e, i, n, a, o) {
		if (o && o.length) {
			var r = a_(e, "color") || null != a.color && "none" !== a.color && (a_(e, "colorAlpha") || a_(e, "colorSaturation"));
			if (r) {
				var s = e.get("visualMin"),
					l = e.get("visualMax"),
					u = i.dataExtent.slice();
				null != s && s < u[0] && (u[0] = s), null != l && l > u[1] && (u[1] = l);
				var h = e.get("colorMappingBy"),
					c = {
						type: r.name,
						dataExtent: u,
						visual: r.range
					};
				"color" !== c.type || "index" !== h && "id" !== h ? c.mappingMethod = "linear" : (c.mappingMethod = "category", c.loop = !
					0);
				var d = new Bx(c);
				return d.__drColorMappingBy = h, d
			}
		}
	}

	function a_(t, e) {
		var i = t.get(e);
		return $x(i) && i.length ? {
			name: e,
			range: i
		} : null
	}

	function o_(t, e, i, n, a, o) {
		var r = L({}, e);
		if (a) {
			var s = a.type,
				l = "color" === s && a.__drColorMappingBy,
				u = "index" === l ? n : "id" === l ? o.mapIdToIndex(i.getId()) : i.getValue(t.get("visualDimension"));
			r[s] = a.mapValueToVisual(u)
		}
		return r
	}
	var r_ = Math.max,
		s_ = Math.min,
		l_ = W,
		u_ = E,
		h_ = ["itemStyle", "borderWidth"],
		c_ = ["itemStyle", "gapWidth"],
		d_ = ["upperLabel", "show"],
		f_ = ["upperLabel", "height"],
		p_ = {
			seriesType: "treemap",
			reset: function(t, e, i, n) {
				var a = i.getWidth(),
					o = i.getHeight(),
					r = t.option,
					s = au(t.getBoxLayoutParams(), {
						width: i.getWidth(),
						height: i.getHeight()
					}),
					l = r.size || [],
					u = xl(l_(s.width, l[0]), a),
					h = xl(l_(s.height, l[1]), o),
					c = n && n.type,
					d = dx(n, ["treemapZoomToNode", "treemapRootToNode"], t),
					f = "treemapRender" === c || "treemapMove" === c ? n.rootRect : null,
					p = t.getViewRoot(),
					g = fx(p);
				if ("treemapMove" !== c) {
					var m = "treemapZoomToNode" === c ? function(t, e, i, n, a) {
							var o, r = (e || {}).node,
								s = [n, a];
							if (!r || r === i) return s;
							var l = n * a,
								u = l * t.option.zoomToNodeRatio;
							for (; o = r.parentNode;) {
								for (var h = 0, c = o.children, d = 0, f = c.length; d < f; d++) h += c[d].getValue();
								var p = r.getValue();
								if (0 === p) return s;
								u *= h / p;
								var g = o.getModel(),
									m = g.get(h_),
									v = Math.max(m, y_(g));
								u += 4 * m * m + (3 * m + v) * Math.pow(u, .5), Al < u && (u = Al), r = o
							}
							u < l && (u = l);
							var y = Math.pow(u / l, .5);
							return [n * y, a * y]
						}(t, d, p, u, h) : f ? [f.width, f.height] : [u, h],
						v = r.sort;
					v && "asc" !== v && "desc" !== v && (v = "desc");
					var y = {
						squareRatio: r.squareRatio,
						sort: v,
						leafDepth: r.leafDepth
					};
					p.hostTree.clearLayouts();
					var x = {
						x: 0,
						y: 0,
						width: m[0],
						height: m[1],
						area: m[0] * m[1]
					};
					p.setLayout(x),
						function t(e, i, n, a) {
							var o;
							var r;
							if (e.isRemoved()) return;
							var s = e.getLayout();
							o = s.width;
							r = s.height;
							var l = e.getModel();
							var u = l.get(h_);
							var h = l.get(c_) / 2;
							var c = y_(l);
							var d = Math.max(u, c);
							var f = u - h;
							var p = d - h;
							var l = e.getModel();
							e.setLayout({
								borderWidth: u,
								upperHeight: d,
								upperLabelHeight: c
							}, !0);
							o = r_(o - 2 * f, 0);
							r = r_(r - f - p, 0);
							var g = o * r;
							var m = g_(e, l, g, i, n, a);
							if (!m.length) return;
							var v = {
								x: f,
								y: p,
								width: o,
								height: r
							};
							var y = s_(o, r);
							var x = 1 / 0;
							var _ = [];
							_.area = 0;
							for (var w = 0, b = m.length; w < b;) {
								var S = m[w];
								_.push(S), _.area += S.getLayout().area;
								var M = m_(_, y, i.squareRatio);
								x = M <= x ? (w++, M) : (_.area -= _.pop().getLayout().area, v_(_, y, v, h, !1), y = s_(v.width, v.height), _
									.length = _.area = 0, 1 / 0)
							}
							_.length && v_(_, y, v, h, !0);
							if (!n) {
								var I = l.get("childrenVisibleMin");
								null != I && g < I && (n = !0)
							}
							for (var w = 0, b = m.length; w < b; w++) t(m[w], i, n, a + 1)
						}(p, y, !1, 0);
					x = p.getLayout();
					u_(g, function(t, e) {
						var i = (g[e + 1] || p).getValue();
						t.setLayout(L({
							dataExtent: [i, i],
							borderWidth: 0,
							upperHeight: 0
						}, x))
					})
				}
				var _ = t.getData().tree.root;
				_.setLayout(function(t, e, i) {
						if (e) return {
							x: e.x,
							y: e.y
						};
						var n = {
							x: 0,
							y: 0
						};
						if (!i) return n;
						var a = i.node,
							o = a.getLayout();
						if (!o) return n;
						var r = [o.width / 2, o.height / 2],
							s = a;
						for (; s;) {
							var l = s.getLayout();
							r[0] += l.x, r[1] += l.y, s = s.parentNode
						}
						return {
							x: t.width / 2 - r[0],
							y: t.height / 2 - r[1]
						}
					}(s, f, d), !0), t.setLayoutInfo(s),
					function e(t, i, n, a, o) {
						var r = t.getLayout();
						var s = n[o];
						var l = s && s === t;
						if (s && !l || o === n.length && t !== a) return;
						t.setLayout({
							isInView: !0,
							invisible: !l && !i.intersect(r),
							isAboveViewRoot: l
						}, !0);
						var u = new bi(i.x - r.x, i.y - r.y, i.width, i.height);
						u_(t.viewChildren || [], function(t) {
							e(t, u, n, a, o + 1)
						})
					}(_, new bi(-s.x, -s.y, a, o), g, p, 0)
			}
		};

	function g_(t, e, i, n, a, o) {
		var r = t.children || [],
			s = n.sort;
		"asc" !== s && "desc" !== s && (s = null);
		var l = null != n.leafDepth && n.leafDepth <= o;
		if (a && !l) return t.viewChildren = [];
		! function(t, n) {
			n && t.sort(function(t, e) {
				var i = "asc" === n ? t.getValue() - e.getValue() : e.getValue() - t.getValue();
				return 0 == i ? "asc" === n ? t.dataIndex - e.dataIndex : e.dataIndex - t.dataIndex : i
			})
		}(r = M(r, function(t) {
			return !t.isRemoved()
		}), s);
		var u = function(t, e, i) {
			for (var n = 0, a = 0, o = e.length; a < o; a++) n += e[a].getValue();
			var r = t.get("visualDimension");
			if (e && e.length)
				if ("value" === r && i) s = [e[e.length - 1].getValue(), e[0].getValue()], "asc" === i && s.reverse();
				else {
					var s = [1 / 0, -1 / 0];
					u_(e, function(t) {
						var e = t.getValue(r);
						e < s[0] && (s[0] = e), e > s[1] && (s[1] = e)
					})
				}
			else s = [NaN, NaN];
			return {
				sum: n,
				dataExtent: s
			}
		}(e, r, s);
		if (0 === u.sum) return t.viewChildren = [];
		if (u.sum = function(t, e, i, n, a) {
				if (!n) return i;
				for (var o = t.get("visibleMin"), r = a.length, s = r, l = r - 1; 0 <= l; l--) {
					var u = a["asc" === n ? r - l - 1 : l].getValue();
					u / i * e < o && (s = l, i -= u)
				}
				return "asc" === n ? a.splice(0, r - s) : a.splice(s, r - s), i
			}(e, i, u.sum, s, r), 0 === u.sum) return t.viewChildren = [];
		for (var h = 0, c = r.length; h < c; h++) {
			var d = r[h].getValue() / u.sum * i;
			r[h].setLayout({
				area: d
			})
		}
		return l && (r.length && t.setLayout({
			isLeafRoot: !0
		}, !0), r.length = 0), t.viewChildren = r, t.setLayout({
			dataExtent: u.dataExtent
		}, !0), r
	}

	function m_(t, e, i) {
		for (var n, a = 0, o = 1 / 0, r = 0, s = t.length; r < s; r++)(n = t[r].getLayout().area) && (n < o && (o = n), a <
			n && (a = n));
		var l = t.area * t.area,
			u = e * e * i;
		return l ? r_(u * a / l, l / (u * o)) : 1 / 0
	}

	function v_(t, e, i, n, a) {
		var o = e === i.width ? 0 : 1,
			r = 1 - o,
			s = ["x", "y"],
			l = ["width", "height"],
			u = i[s[o]],
			h = e ? t.area / e : 0;
		(a || h > i[l[r]]) && (h = i[l[r]]);
		for (var c = 0, d = t.length; c < d; c++) {
			var f = t[c],
				p = {},
				g = h ? f.getLayout().area / h : 0,
				m = p[l[r]] = r_(h - 2 * n, 0),
				v = i[s[o]] + i[l[o]] - u,
				y = c === d - 1 || v < g ? v : g,
				x = p[l[o]] = r_(y - 2 * n, 0);
			p[s[r]] = i[s[r]] + s_(n, m / 2), p[s[o]] = u + s_(n, x / 2), u += y, f.setLayout(p, !0)
		}
		i[s[r]] += h, i[l[r]] -= h
	}

	function y_(t) {
		return t.get(d_) ? t.get(f_) : 0
	}

	function x_(t) {
		return "_EC_" + t
	}
	af(Qx), nf(p_);

	function __(t) {
		this._directed = t || !1, this.nodes = [], this.edges = [], this._nodesMap = {}, this._edgesMap = {}, this.data,
			this.edgeData
	}
	var w_ = __.prototype;

	function b_(t, e) {
		this.id = null == t ? "" : t, this.inEdges = [], this.outEdges = [], this.edges = [], this.hostGraph, this.dataIndex =
			null == e ? -1 : e
	}

	function S_(t, e, i) {
		this.node1 = t, this.node2 = e, this.dataIndex = null == i ? -1 : i
	}
	w_.type = "graph", w_.isDirected = function() {
		return this._directed
	}, w_.addNode = function(t, e) {
		t = null == t ? "" + e : "" + t;
		var i = this._nodesMap;
		if (!i[x_(t)]) {
			var n = new b_(t, e);
			return (n.hostGraph = this).nodes.push(n), i[x_(t)] = n
		}
	}, w_.getNodeByIndex = function(t) {
		var e = this.data.getRawIndex(t);
		return this.nodes[e]
	}, w_.getNodeById = function(t) {
		return this._nodesMap[x_(t)]
	}, w_.addEdge = function(t, e, i) {
		var n = this._nodesMap,
			a = this._edgesMap;
		if ("number" == typeof t && (t = this.nodes[t]), "number" == typeof e && (e = this.nodes[e]), b_.isInstance(t) || (
				t = n[x_(t)]), b_.isInstance(e) || (e = n[x_(e)]), t && e) {
			var o = t.id + "-" + e.id;
			if (!a[o]) {
				var r = new S_(t, e, i);
				return (r.hostGraph = this)._directed && (t.outEdges.push(r), e.inEdges.push(r)), t.edges.push(r), t !== e && e.edges
					.push(r), this.edges.push(r), a[o] = r
			}
		}
	}, w_.getEdgeByIndex = function(t) {
		var e = this.edgeData.getRawIndex(t);
		return this.edges[e]
	}, w_.getEdge = function(t, e) {
		b_.isInstance(t) && (t = t.id), b_.isInstance(e) && (e = e.id);
		var i = this._edgesMap;
		return this._directed ? i[t + "-" + e] : i[t + "-" + e] || i[e + "-" + t]
	}, w_.eachNode = function(t, e) {
		for (var i = this.nodes, n = i.length, a = 0; a < n; a++) 0 <= i[a].dataIndex && t.call(e, i[a], a)
	}, w_.eachEdge = function(t, e) {
		for (var i = this.edges, n = i.length, a = 0; a < n; a++) 0 <= i[a].dataIndex && 0 <= i[a].node1.dataIndex && 0 <=
			i[a].node2.dataIndex && t.call(e, i[a], a)
	}, w_.breadthFirstTraverse = function(t, e, i, n) {
		if (b_.isInstance(e) || (e = this._nodesMap[x_(e)]), e) {
			for (var a = "out" === i ? "outEdges" : "in" === i ? "inEdges" : "edges", o = 0; o < this.nodes.length; o++) this.nodes[
				o].__visited = !1;
			if (!t.call(n, e, null))
				for (var r = [e]; r.length;) {
					var s = r.shift(),
						l = s[a];
					for (o = 0; o < l.length; o++) {
						var u = l[o],
							h = u.node1 === s ? u.node2 : u.node1;
						if (!h.__visited) {
							if (t.call(n, h, s)) return;
							r.push(h), h.__visited = !0
						}
					}
				}
		}
	}, w_.update = function() {
		for (var t = this.data, i = this.edgeData, e = this.nodes, n = this.edges, a = 0, o = e.length; a < o; a++) e[a].dataIndex = -
			1;
		for (a = 0, o = t.count(); a < o; a++) e[t.getRawIndex(a)].dataIndex = a;
		i.filterSelf(function(t) {
			var e = n[i.getRawIndex(t)];
			return 0 <= e.node1.dataIndex && 0 <= e.node2.dataIndex
		});
		for (a = 0, o = n.length; a < o; a++) n[a].dataIndex = -1;
		for (a = 0, o = i.count(); a < o; a++) n[i.getRawIndex(a)].dataIndex = a
	}, w_.clone = function() {
		for (var t = new __(this._directed), e = this.nodes, i = this.edges, n = 0; n < e.length; n++) t.addNode(e[n].id, e[
			n].dataIndex);
		for (n = 0; n < i.length; n++) {
			var a = i[n];
			t.addEdge(a.node1.id, a.node2.id, a.dataIndex)
		}
		return t
	}, b_.prototype = {
		constructor: b_,
		degree: function() {
			return this.edges.length
		},
		inDegree: function() {
			return this.inEdges.length
		},
		outDegree: function() {
			return this.outEdges.length
		},
		getModel: function(t) {
			if (!(this.dataIndex < 0)) return this.hostGraph.data.getItemModel(this.dataIndex).getModel(t)
		}
	}, S_.prototype.getModel = function(t) {
		if (!(this.dataIndex < 0)) return this.hostGraph.edgeData.getItemModel(this.dataIndex).getModel(t)
	};

	function M_(i, n) {
		return {
			getValue: function(t) {
				var e = this[i][n];
				return e.get(e.getDimension(t || "value"), this.dataIndex)
			},
			setVisual: function(t, e) {
				0 <= this.dataIndex && this[i][n].setItemVisual(this.dataIndex, t, e)
			},
			getVisual: function(t, e) {
				return this[i][n].getItemVisual(this.dataIndex, t, e)
			},
			setLayout: function(t, e) {
				0 <= this.dataIndex && this[i][n].setItemLayout(this.dataIndex, t, e)
			},
			getLayout: function() {
				return this[i][n].getItemLayout(this.dataIndex)
			},
			getGraphicEl: function() {
				return this[i][n].getItemGraphicEl(this.dataIndex)
			},
			getRawIndex: function() {
				return this[i][n].getRawIndex(this.dataIndex)
			}
		}
	}
	b(b_, M_("hostGraph", "data")), b(S_, M_("hostGraph", "edgeData")), __.Node = b_, __.Edge = S_, Wa(b_), Wa(S_);

	function I_(t, e, i, n, a) {
		for (var o = new __(n), r = 0; r < t.length; r++) o.addNode(W(t[r].id, t[r].name, r), r);
		var s = [],
			l = [],
			u = 0;
		for (r = 0; r < e.length; r++) {
			var h = e[r],
				c = h.source,
				d = h.target;
			o.addEdge(c, d, u) && (l.push(h), s.push(W(h.id, c + " > " + d)), u++)
		}
		var f, p = i.get("coordinateSystem");
		if ("cartesian2d" === p || "polar" === p) f = Xf(t, i);
		else {
			var g = Hu.get(p),
				m = g && "view" !== g.type && g.dimensions || [];
			_(m, "value") < 0 && m.concat(["value"]);
			var v = Wf(t, {
				coordDimensions: m
			});
			(f = new Tf(v, i)).initData(t)
		}
		var y = new Tf(["value"], i);
		return y.initData(l, s), a && a(f, y), Wy({
			mainData: f,
			struct: o,
			structAttr: "graph",
			datas: {
				node: f,
				edge: y
			},
			datasAttr: {
				node: "data",
				edge: "edgeData"
			}
		}), o.update(), o
	}
	var A_ = uf({
			type: "series.graph",
			init: function(t) {
				A_.superApply(this, "init", arguments), this.legendDataProvider = function() {
					return this._categoriesData
				}, this.fillDataTextStyle(t.edges || t.links), this._updateCategoriesData()
			},
			mergeOption: function(t) {
				A_.superApply(this, "mergeOption", arguments), this.fillDataTextStyle(t.edges || t.links), this._updateCategoriesData()
			},
			mergeDefaultAndTheme: function(t) {
				A_.superApply(this, "mergeDefaultAndTheme", arguments), ba(t, ["edgeLabel"], ["show"])
			},
			getInitialData: function(t, s) {
				var e = t.edges || t.links || [],
					i = t.data || t.nodes || [],
					l = this;
				if (i && e) return I_(i, e, this, !0, function(t, e) {
					t.wrapMethod("getItemModel", function(t) {
						var e = l._categoriesModels[t.getShallow("category")];
						return e && (e.parentModel = t.parentModel, t.parentModel = e), t
					});
					var i = l.getModel("edgeLabel"),
						n = new dl({
							label: i.option
						}, i.parentModel, s),
						a = l.getModel("emphasis.edgeLabel"),
						o = new dl({
							emphasis: {
								label: a.option
							}
						}, a.parentModel, s);

					function r(t) {
						return (t = this.parsePath(t)) && "label" === t[0] ? n : t && "emphasis" === t[0] && "label" === t[1] ? o :
							this.parentModel
					}
					e.wrapMethod("getItemModel", function(t) {
						return t.customizeGetParent(r), t
					})
				}).data
			},
			getGraph: function() {
				return this.getData().graph
			},
			getEdgeData: function() {
				return this.getGraph().edgeData
			},
			getCategoriesData: function() {
				return this._categoriesData
			},
			formatTooltip: function(t, e, i) {
				if ("edge" !== i) return A_.superApply(this, "formatTooltip", arguments);
				var n = this.getData(),
					a = this.getDataParams(t, i),
					o = n.graph.getEdgeByIndex(t),
					r = n.getName(o.node1.dataIndex),
					s = n.getName(o.node2.dataIndex),
					l = [];
				return null != r && l.push(r), null != s && l.push(s), l = Wl(l.join(" > ")), a.value && (l += " : " + Wl(a.value)),
					l
			},
			_updateCategoriesData: function() {
				var t = N(this.option.categories || [], function(t) {
						return null != t.value ? t : L({
							value: 0
						}, t)
					}),
					e = new Tf(["value"], this);
				e.initData(t), this._categoriesData = e, this._categoriesModels = e.mapArray(function(t) {
					return e.getItemModel(t, !0)
				})
			},
			setZoom: function(t) {
				this.option.zoom = t
			},
			setCenter: function(t) {
				this.option.center = t
			},
			isAnimationEnabled: function() {
				return A_.superCall(this, "isAnimationEnabled") && !("force" === this.get("layout") && this.get(
					"force.layoutAnimation"))
			},
			defaultOption: {
				zlevel: 0,
				z: 2,
				coordinateSystem: "view",
				legendHoverLink: !0,
				hoverAnimation: !0,
				layout: null,
				focusNodeAdjacency: !1,
				circular: {
					rotateLabel: !1
				},
				force: {
					initLayout: null,
					repulsion: [0, 50],
					gravity: .1,
					friction: .6,
					edgeLength: 30,
					layoutAnimation: !0
				},
				left: "center",
				top: "center",
				symbol: "circle",
				symbolSize: 10,
				edgeSymbol: ["none", "none"],
				edgeSymbolSize: 10,
				edgeLabel: {
					position: "middle"
				},
				draggable: !1,
				roam: !1,
				center: null,
				zoom: 1,
				nodeScaleRatio: .6,
				label: {
					show: !1,
					formatter: "{b}"
				},
				itemStyle: {},
				lineStyle: {
					color: "#aaa",
					width: 1,
					curveness: 0,
					opacity: .5
				},
				emphasis: {
					label: {
						show: !0
					}
				}
			}
		}),
		T_ = Ur.prototype,
		D_ = qr.prototype;

	function C_(t) {
		return isNaN(+t.cpx1) || isNaN(+t.cpy1)
	}
	var L_ = ds({
			type: "ec-line",
			style: {
				stroke: "#000",
				fill: null
			},
			shape: {
				x1: 0,
				y1: 0,
				x2: 0,
				y2: 0,
				percent: 1,
				cpx1: null,
				cpy1: null
			},
			buildPath: function(t, e) {
				this[C_(e) ? "_buildPathLine" : "_buildPathCurve"](t, e)
			},
			_buildPathLine: T_.buildPath,
			_buildPathCurve: D_.buildPath,
			pointAt: function(t) {
				return this[C_(this.shape) ? "_pointAtLine" : "_pointAtCurve"](t)
			},
			_pointAtLine: T_.pointAt,
			_pointAtCurve: D_.pointAt,
			tangentAt: function(t) {
				var e = this.shape,
					i = C_(e) ? [e.x2 - e.x1, e.y2 - e.y1] : this._tangentAtCurve(t);
				return mt(i, i)
			},
			_tangentAtCurve: D_.tangentAt
		}),
		k_ = ["fromSymbol", "toSymbol"];

	function P_(t) {
		return "_" + t + "Type"
	}

	function N_(t, e, i) {
		var n = e.getItemVisual(i, "color"),
			a = e.getItemVisual(i, t),
			o = e.getItemVisual(i, t + "Size");
		if (a && "none" !== a) {
			k(o) || (o = [o, o]);
			var r = Jp(a, -o[0] / 2, -o[1] / 2, o[0], o[1], n);
			return r.name = t, r
		}
	}

	function O_(t, e) {
		t.x1 = e[0][0], t.y1 = e[0][1], t.x2 = e[1][0], t.y2 = e[1][1], t.percent = 1;
		var i = e[2];
		i ? (t.cpx1 = i[0], t.cpy1 = i[1]) : (t.cpx1 = NaN, t.cpy1 = NaN)
	}

	function E_(t, e, i) {
		Si.call(this), this._createLine(t, e, i)
	}
	var R_ = E_.prototype;

	function z_(t) {
		this._ctor = t || E_, this.group = new Si
	}
	R_.beforeUpdate = function() {
		var t = this.childOfName("fromSymbol"),
			e = this.childOfName("toSymbol"),
			i = this.childOfName("label");
		if (t || e || !i.ignore) {
			for (var n = 1, a = this.parent; a;) a.scale && (n /= a.scale[0]), a = a.parent;
			var o = this.childOfName("line");
			if (this.__dirty || o.__dirty) {
				var r = o.shape.percent,
					s = o.pointAt(0),
					l = o.pointAt(r),
					u = ht([], l, s);
				if (mt(u, u), t) {
					t.attr("position", s);
					var h = o.tangentAt(0);
					t.attr("rotation", Math.PI / 2 - Math.atan2(h[1], h[0])), t.attr("scale", [n * r, n * r])
				}
				if (e) {
					e.attr("position", l);
					h = o.tangentAt(1);
					e.attr("rotation", -Math.PI / 2 - Math.atan2(h[1], h[0])), e.attr("scale", [n * r, n * r])
				}
				if (!i.ignore) {
					var c, d, f;
					i.attr("position", l);
					var p = 5 * n;
					if ("end" === i.__position) c = [u[0] * p + l[0], u[1] * p + l[1]], d = .8 < u[0] ? "left" : u[0] < -.8 ?
						"right" : "center", f = .8 < u[1] ? "top" : u[1] < -.8 ? "bottom" : "middle";
					else if ("middle" === i.__position) {
						var g = r / 2,
							m = [(h = o.tangentAt(g))[1], -h[0]],
							v = o.pointAt(g);
						0 < m[1] && (m[0] = -m[0], m[1] = -m[1]), c = [v[0] + m[0] * p, v[1] + m[1] * p], d = "center", f = "bottom";
						var y = -Math.atan2(h[1], h[0]);
						l[0] < s[0] && (y = Math.PI + y), i.attr("rotation", y)
					} else c = [-u[0] * p + s[0], -u[1] * p + s[1]], d = .8 < u[0] ? "right" : u[0] < -.8 ? "left" : "center", f =
						.8 < u[1] ? "bottom" : u[1] < -.8 ? "top" : "middle";
					i.attr({
						style: {
							textVerticalAlign: i.__verticalAlign || f,
							textAlign: i.__textAlign || d
						},
						position: c,
						scale: [n, n]
					})
				}
			}
		}
	}, R_._createLine = function(i, n, t) {
		var e = i.hostModel,
			a = function(t) {
				var e = new L_({
					name: "line",
					subPixelOptimize: !0
				});
				return O_(e.shape, t), e
			}(i.getItemLayout(n));
		a.shape.percent = 0, qs(a, {
			shape: {
				percent: 1
			}
		}, e, n), this.add(a);
		var o = new Dr({
			name: "label",
			lineLabelOriginalOpacity: 1
		});
		this.add(o), E(k_, function(t) {
			var e = N_(t, i, n);
			this.add(e), this[P_(t)] = i.getItemVisual(n, t)
		}, this), this._updateCommonStl(i, n, t)
	}, R_.updateData = function(a, o, t) {
		var e = a.hostModel,
			i = this.childOfName("line"),
			n = a.getItemLayout(o),
			r = {
				shape: {}
			};
		O_(r.shape, n), js(i, r, e, o), E(k_, function(t) {
			var e = a.getItemVisual(o, t),
				i = P_(t);
			if (this[i] !== e) {
				this.remove(this.childOfName(t));
				var n = N_(t, a, o);
				this.add(n)
			}
			this[i] = e
		}, this), this._updateCommonStl(a, o, t)
	}, R_._updateCommonStl = function(t, e, i) {
		var n = t.hostModel,
			a = this.childOfName("line"),
			o = i && i.lineStyle,
			r = i && i.hoverLineStyle,
			s = i && i.labelModel,
			l = i && i.hoverLabelModel;
		if (!i || t.hasItemOption) {
			var u = t.getItemModel(e);
			o = u.getModel("lineStyle").getLineStyle(), r = u.getModel("emphasis.lineStyle").getLineStyle(), s = u.getModel(
				"label"), l = u.getModel("emphasis.label")
		}
		var h = t.getItemVisual(e, "color"),
			c = Z(t.getItemVisual(e, "opacity"), o.opacity, 1);
		a.useStyle(C({
			strokeNoScale: !0,
			fill: "none",
			stroke: h,
			opacity: c
		}, o)), a.hoverStyle = r, E(k_, function(t) {
			var e = this.childOfName(t);
			e && (e.setColor(h), e.setStyle({
				opacity: c
			}))
		}, this);
		var d, f, p = s.getShallow("show"),
			g = l.getShallow("show"),
			m = this.childOfName("label");
		if ((p || g) && (d = h || "#000", null == (f = n.getFormattedLabel(e, "normal", t.dataType)))) {
			var v = n.getRawValue(e);
			f = null == v ? t.getName(e) : isFinite(v) ? _l(v) : v
		}
		var y = p ? f : null,
			x = g ? H(n.getFormattedLabel(e, "emphasis", t.dataType), f) : null,
			_ = m.style;
		null == y && null == x || (Gs(m.style, s, {
				text: y
			}, {
				autoColor: d
			}), m.__textAlign = _.textAlign, m.__verticalAlign = _.textVerticalAlign, m.__position = s.get("position") ||
			"middle"), m.hoverStyle = null != x ? {
			text: x,
			textFill: l.getTextColor(!0),
			fontStyle: l.getShallow("fontStyle"),
			fontWeight: l.getShallow("fontWeight"),
			fontSize: l.getShallow("fontSize"),
			fontFamily: l.getShallow("fontFamily")
		} : {
			text: null
		}, m.ignore = !p && !g, Os(this)
	}, R_.highlight = function() {
		this.trigger("emphasis")
	}, R_.downplay = function() {
		this.trigger("normal")
	}, R_.updateLayout = function(t, e) {
		this.setLinePoints(t.getItemLayout(e))
	}, R_.setLinePoints = function(t) {
		var e = this.childOfName("line");
		O_(e.shape, t), e.dirty()
	}, w(E_, Si);
	var B_ = z_.prototype;

	function V_(t) {
		var e = t.hostModel;
		return {
			lineStyle: e.getModel("lineStyle").getLineStyle(),
			hoverLineStyle: e.getModel("emphasis.lineStyle").getLineStyle(),
			labelModel: e.getModel("label"),
			hoverLabelModel: e.getModel("emphasis.label")
		}
	}

	function G_(t) {
		return isNaN(t[0]) || isNaN(t[1])
	}

	function F_(t) {
		return !G_(t[0]) && !G_(t[1])
	}

	function W_(t) {
		var e = t.coordinateSystem;
		if ("view" !== e.type) return 1;
		var i = t.option.nodeScaleRatio,
			n = e.scale,
			a = n && n[0] || 1;
		return ((e.getZoom() - 1) * i + 1) / a
	}

	function H_(t) {
		var e = t.getVisual("symbolSize");
		return e instanceof Array && (e = (e[0] + e[1]) / 2), +e
	}
	B_.isPersistent = function() {
		return !0
	}, B_.updateData = function(i) {
		var n = this,
			e = n.group,
			a = n._lineData;
		n._lineData = i, a || e.removeAll();
		var o = V_(i);
		i.diff(a).add(function(t) {
			! function(t, e, i, n) {
				if (!F_(e.getItemLayout(i))) return;
				var a = new t._ctor(e, i, n);
				e.setItemGraphicEl(i, a), t.group.add(a)
			}(n, i, t, o)
		}).update(function(t, e) {
			! function(t, e, i, n, a, o) {
				var r = e.getItemGraphicEl(n);
				if (!F_(i.getItemLayout(a))) return t.group.remove(r);
				r ? r.updateData(i, a, o) : r = new t._ctor(i, a, o);
				i.setItemGraphicEl(a, r), t.group.add(r)
			}(n, a, i, e, t, o)
		}).remove(function(t) {
			e.remove(a.getItemGraphicEl(t))
		}).execute()
	}, B_.updateLayout = function() {
		var i = this._lineData;
		i && i.eachItemGraphicEl(function(t, e) {
			t.updateLayout(i, e)
		}, this)
	}, B_.incrementalPrepareUpdate = function(t) {
		this._seriesScope = V_(t), this._lineData = null, this.group.removeAll()
	}, B_.incrementalUpdate = function(t, e) {
		function i(t) {
			t.isGroup || (t.incremental = t.useHoverLayer = !0)
		}
		for (var n = t.start; n < t.end; n++) {
			if (F_(e.getItemLayout(n))) {
				var a = new this._ctor(e, n, this._seriesScope);
				a.traverse(i), this.group.add(a), e.setItemGraphicEl(n, a)
			}
		}
	}, B_.remove = function() {
		this._clearIncremental(), this._incremental = null, this.group.removeAll()
	}, B_._clearIncremental = function() {
		var t = this._incremental;
		t && t.clearDisplaybles()
	};
	var Z_ = [],
		U_ = [],
		X_ = [],
		Y_ = fo,
		j_ = _t,
		q_ = Math.abs;

	function K_(t, e, i) {
		for (var n, a = t[0], o = t[1], r = t[2], s = 1 / 0, l = i * i, u = .1, h = .1; h <= .9; h += .1) {
			Z_[0] = Y_(a[0], o[0], r[0], h), Z_[1] = Y_(a[1], o[1], r[1], h), (f = q_(j_(Z_, e) - l)) < s && (s = f, n = h)
		}
		for (var c = 0; c < 32; c++) {
			var d = n + u;
			U_[0] = Y_(a[0], o[0], r[0], n), U_[1] = Y_(a[1], o[1], r[1], n), X_[0] = Y_(a[0], o[0], r[0], d), X_[1] = Y_(a[1],
				o[1], r[1], d);
			var f = j_(U_, e) - l;
			if (q_(f) < .01) break;
			var p = j_(X_, e) - l;
			u /= 2, f < 0 ? 0 <= p ? n += u : n -= u : 0 <= p ? n -= u : n += u
		}
		return n
	}

	function $_(t, l) {
		var u = [],
			h = mo,
			c = [
				[],
				[],
				[]
			],
			d = [
				[],
				[]
			],
			f = [];
		l /= 2, t.eachEdge(function(t, e) {
			var i = t.getLayout(),
				n = t.getVisual("fromSymbol"),
				a = t.getVisual("toSymbol");
			i.__original || (i.__original = [rt(i[0]), rt(i[1])], i[2] && i.__original.push(rt(i[2])));
			var o = i.__original;
			if (null != i[2]) {
				if (ot(c[0], o[0]), ot(c[1], o[2]), ot(c[2], o[1]), n && "none" !== n) {
					var r = H_(t.node1),
						s = K_(c, o[0], r * l);
					h(c[0][0], c[1][0], c[2][0], s, u), c[0][0] = u[3], c[1][0] = u[4], h(c[0][1], c[1][1], c[2][1], s, u), c[0][1] =
						u[3], c[1][1] = u[4]
				}
				if (a && "none" !== a) {
					r = H_(t.node2), s = K_(c, o[1], r * l);
					h(c[0][0], c[1][0], c[2][0], s, u), c[1][0] = u[1], c[2][0] = u[2], h(c[0][1], c[1][1], c[2][1], s, u), c[1][1] =
						u[1], c[2][1] = u[2]
				}
				ot(i[0], c[0]), ot(i[1], c[2]), ot(i[2], c[1])
			} else {
				if (ot(d[0], o[0]), ot(d[1], o[1]), ht(f, d[1], d[0]), mt(f, f), n && "none" !== n) {
					r = H_(t.node1);
					ut(d[0], d[0], f, r * l)
				}
				if (a && "none" !== a) {
					r = H_(t.node2);
					ut(d[1], d[1], f, -r * l)
				}
				ot(i[0], d[0]), ot(i[1], d[1])
			}
		})
	}
	var J_ = "__focusNodeAdjacency",
		Q_ = "__unfocusNodeAdjacency",
		tw = ["itemStyle", "opacity"],
		ew = ["lineStyle", "opacity"];

	function iw(t, e) {
		var i = t.getVisual("opacity");
		return null != i ? i : t.getModel().get(e)
	}

	function nw(t, e, i) {
		var n = t.getGraphicEl(),
			a = iw(t, e);
		null != i && (null == a && (a = 1), a *= i), n.downplay && n.downplay(), n.traverse(function(t) {
			if (!t.isGroup) {
				var e = t.lineLabelOriginalOpacity;
				null != e && null == i || (e = a), t.setStyle("opacity", e)
			}
		})
	}

	function aw(t, e) {
		var i = iw(t, e),
			n = t.getGraphicEl();
		n.traverse(function(t) {
			t.isGroup || t.setStyle("opacity", i)
		}), n.highlight && n.highlight()
	}
	hf({
		type: "graph",
		init: function(t, e) {
			var i = new Ng,
				n = new z_,
				a = this.group;
			this._controller = new uy(e.getZr()), this._controllerHost = {
				target: a
			}, a.add(i.group), a.add(n.group), this._symbolDraw = i, this._lineDraw = n, this._firstRender = !0
		},
		render: function(a, t, o) {
			var e = a.coordinateSystem;
			this._model = a;
			var i = this._symbolDraw,
				n = this._lineDraw,
				r = this.group;
			if ("view" === e.type) {
				var s = {
					position: e.position,
					scale: e.scale
				};
				this._firstRender ? r.attr(s) : js(r, s, a)
			}
			$_(a.getGraph(), W_(a));
			var l = a.getData();
			i.updateData(l);
			var u = a.getEdgeData();
			n.updateData(u), this._updateNodeAndLinkScale(), this._updateController(a, t, o), clearTimeout(this._layoutTimeout);
			var h = a.forceLayout,
				c = a.get("force.layoutAnimation");
			h && this._startForceLayoutIteration(h, c), l.eachItemGraphicEl(function(t, e) {
				var i = l.getItemModel(e);
				t.off("drag").off("dragend");
				var n = i.get("draggable");
				n && t.on("drag", function() {
					h && (h.warmUp(), this._layouting || this._startForceLayoutIteration(h, c), h.setFixed(e), l.setItemLayout(
						e, t.position))
				}, this).on("dragend", function() {
					h && h.setUnfixed(e)
				}, this), t.setDraggable(n && h), t[J_] && t.off("mouseover", t[J_]), t[Q_] && t.off("mouseout", t[Q_]), i.get(
					"focusNodeAdjacency") && (t.on("mouseover", t[J_] = function() {
					o.dispatchAction({
						type: "focusNodeAdjacency",
						seriesId: a.id,
						dataIndex: t.dataIndex
					})
				}), t.on("mouseout", t[Q_] = function() {
					o.dispatchAction({
						type: "unfocusNodeAdjacency",
						seriesId: a.id
					})
				}))
			}, this), l.graph.eachEdge(function(t) {
				var e = t.getGraphicEl();
				e[J_] && e.off("mouseover", e[J_]), e[Q_] && e.off("mouseout", e[Q_]), t.getModel().get("focusNodeAdjacency") &&
					(e.on("mouseover", e[J_] = function() {
						o.dispatchAction({
							type: "focusNodeAdjacency",
							seriesId: a.id,
							edgeDataIndex: t.dataIndex
						})
					}), e.on("mouseout", e[Q_] = function() {
						o.dispatchAction({
							type: "unfocusNodeAdjacency",
							seriesId: a.id
						})
					}))
			});
			var d = "circular" === a.get("layout") && a.get("circular.rotateLabel"),
				f = l.getLayout("cx"),
				p = l.getLayout("cy");
			l.eachItemGraphicEl(function(t, e) {
				var i = l.getItemModel(e).get("label.rotate") || 0,
					n = t.getSymbolPath();
				if (d) {
					var a = l.getItemLayout(e),
						o = Math.atan2(a[1] - p, a[0] - f);
					o < 0 && (o = 2 * Math.PI + o);
					var r = a[0] < f;
					r && (o -= Math.PI);
					var s = r ? "left" : "right";
					Vs(n, {
						textRotation: -o,
						textPosition: s,
						textOrigin: "center"
					}, {
						textPosition: s
					})
				} else Vs(n, {
					textRotation: i *= Math.PI / 180
				})
			}), this._firstRender = !1
		},
		dispose: function() {
			this._controller && this._controller.dispose(), this._controllerHost = {}
		},
		focusNodeAdjacency: function(t, e, i, n) {
			var a = this._model.getData().graph,
				o = n.dataIndex,
				r = n.edgeDataIndex,
				s = a.getNodeByIndex(o),
				l = a.getEdgeByIndex(r);
			(s || l) && (a.eachNode(function(t) {
				nw(t, tw, .1)
			}), a.eachEdge(function(t) {
				nw(t, ew, .1)
			}), s && (aw(s, tw), E(s.edges, function(t) {
				t.dataIndex < 0 || (aw(t, ew), aw(t.node1, tw), aw(t.node2, tw))
			})), l && (aw(l, ew), aw(l.node1, tw), aw(l.node2, tw)))
		},
		unfocusNodeAdjacency: function(t, e, i, n) {
			var a = this._model.getData().graph;
			a.eachNode(function(t) {
				nw(t, tw)
			}), a.eachEdge(function(t) {
				nw(t, ew)
			})
		},
		_startForceLayoutIteration: function(t, i) {
			var n = this;
			! function e() {
				t.step(function(t) {
					n.updateLayout(n._model), (n._layouting = !t) && (i ? n._layoutTimeout = setTimeout(e, 16) : e())
				})
			}()
		},
		_updateController: function(a, t, o) {
			var e = this._controller,
				i = this._controllerHost,
				r = this.group;
			e.setPointerChecker(function(t, e, i) {
				var n = r.getBoundingRect();
				return n.applyTransform(r.transform), n.contain(e, i) && !wy(t, o, a)
			}), "view" === a.coordinateSystem.type ? (e.enable(a.get("roam")), i.zoomLimit = a.get("scaleLimit"), i.zoom =
				a.coordinateSystem.getZoom(), e.off("pan").off("zoom").on("pan", function(t) {
					yy(i, t.dx, t.dy), o.dispatchAction({
						seriesId: a.id,
						type: "graphRoam",
						dx: t.dx,
						dy: t.dy
					})
				}).on("zoom", function(t) {
					xy(i, t.scale, t.originX, t.originY), o.dispatchAction({
						seriesId: a.id,
						type: "graphRoam",
						zoom: t.scale,
						originX: t.originX,
						originY: t.originY
					}), this._updateNodeAndLinkScale(), $_(a.getGraph(), W_(a)), this._lineDraw.updateLayout()
				}, this)) : e.disable()
		},
		_updateNodeAndLinkScale: function() {
			var t = this._model,
				e = t.getData(),
				i = W_(t),
				n = [i, i];
			e.eachItemGraphicEl(function(t, e) {
				t.attr("scale", n)
			})
		},
		updateLayout: function(t) {
			$_(t.getGraph(), W_(t)), this._symbolDraw.updateLayout(), this._lineDraw.updateLayout()
		},
		remove: function(t, e) {
			this._symbolDraw && this._symbolDraw.remove(), this._lineDraw && this._lineDraw.remove()
		}
	}), tf({
		type: "focusNodeAdjacency",
		event: "focusNodeAdjacency",
		update: "series:focusNodeAdjacency"
	}, function() {}), tf({
		type: "unfocusNodeAdjacency",
		event: "unfocusNodeAdjacency",
		update: "series:unfocusNodeAdjacency"
	}, function() {});
	tf({
		type: "graphRoam",
		event: "graphRoam",
		update: "none"
	}, function(i, t) {
		t.eachComponent({
			mainType: "series",
			query: i
		}, function(t) {
			var e = Cy(t.coordinateSystem, i);
			t.setCenter && t.setCenter(e.center), t.setZoom && t.setZoom(e.zoom)
		})
	});

	function ow(t) {
		return t instanceof Array || (t = [t, t]), t
	}

	function rw(t) {
		var e = t.coordinateSystem;
		if (!e || "view" === e.type) {
			var i = t.getGraph();
			i.eachNode(function(t) {
				var e = t.getModel();
				t.setLayout([+e.get("x"), +e.get("y")])
			}), sw(i)
		}
	}

	function sw(t) {
		t.eachEdge(function(t) {
			var e = t.getModel().get("lineStyle.curveness") || 0,
				i = rt(t.node1.getLayout()),
				n = rt(t.node2.getLayout()),
				a = [i, n]; + e && a.push([(i[0] + n[0]) / 2 - (i[1] - n[1]) * e, (i[1] + n[1]) / 2 - (n[0] - i[0]) * e]), t.setLayout(
				a)
		})
	}
	var lw = Math.PI,
		uw = [];

	function hw(t, e) {
		var i = t.coordinateSystem;
		if (!i || "view" === i.type) {
			var n = i.getBoundingRect(),
				a = t.getData(),
				o = a.graph,
				s = n.width / 2 + n.x,
				l = n.height / 2 + n.y,
				r = Math.min(n.width, n.height) / 2,
				u = a.count();
			a.setLayout({
				cx: s,
				cy: l
			}), u && (cw[e](t, i, o, a, r, s, l, u), o.eachEdge(function(t) {
				var e, i = t.getModel().get("lineStyle.curveness") || 0,
					n = rt(t.node1.getLayout()),
					a = rt(t.node2.getLayout()),
					o = (n[0] + a[0]) / 2,
					r = (n[1] + a[1]) / 2; + i && (e = [s * (i *= 3) + o * (1 - i), l * i + r * (1 - i)]), t.setLayout([n, a, e])
			}))
		}
	}
	var cw = {
			value: function(t, e, i, n, a, o, r, s) {
				var l = 0,
					u = n.getSum("value"),
					h = 2 * Math.PI / (u || s);
				i.eachNode(function(t) {
					var e = t.getValue("value"),
						i = h * (u ? e : 1) / 2;
					l += i, t.setLayout([a * Math.cos(l) + o, a * Math.sin(l) + r]), l += i
				})
			},
			symbolSize: function(t, e, i, n, a, o, r, s) {
				var l = 0;
				uw.length = s;
				var u = W_(t);
				i.eachNode(function(t) {
					var e = H_(t);
					isNaN(e) && (e = 2), e < 0 && (e = 0), e *= u;
					var i = Math.asin(e / 2 / a);
					isNaN(i) && (i = lw / 2), uw[t.dataIndex] = i, l += 2 * i
				});
				var h = (2 * lw - l) / s / 2,
					c = 0;
				i.eachNode(function(t) {
					var e = h + uw[t.dataIndex];
					c += e, t.setLayout([a * Math.cos(c) + o, a * Math.sin(c) + r]), c += e
				})
			}
		},
		dw = ut;
	Qd(function(t) {
		var o = t.findComponents({
			mainType: "legend"
		});
		o && o.length && t.eachSeriesByType("graph", function(t) {
			var e = t.getCategoriesData(),
				n = t.getGraph().data,
				a = e.mapArray(e.getName);
			n.filterSelf(function(t) {
				var e = n.getItemModel(t).getShallow("category");
				if (null != e) {
					"number" == typeof e && (e = a[e]);
					for (var i = 0; i < o.length; i++)
						if (!o[i].isSelected(e)) return !1
				}
				return !0
			})
		}, this)
	}), af(rm("graph", "circle", null)), af(function(t) {
		var h = {};
		t.eachSeriesByType("graph", function(s) {
			var l = s.getCategoriesData(),
				a = s.getData(),
				u = {};
			l.each(function(t) {
				var e = l.getName(t);
				u["ec-" + e] = t;
				var i = l.getItemModel(t),
					n = i.get("itemStyle.color") || s.getColorFromPalette(e, h);
				l.setItemVisual(t, "color", n);
				for (var a = ["opacity", "symbol", "symbolSize", "symbolKeepAspect"], o = 0; o < a.length; o++) {
					var r = i.getShallow(a[o], !0);
					null != r && l.setItemVisual(t, a[o], r)
				}
			}), l.count() && a.each(function(t) {
				var e = a.getItemModel(t).getShallow("category");
				if (null != e) {
					"string" == typeof e && (e = u["ec-" + e]);
					for (var i = ["color", "opacity", "symbol", "symbolSize", "symbolKeepAspect"], n = 0; n < i.length; n++)
						null == a.getItemVisual(t, i[n], !0) && a.setItemVisual(t, i[n], l.getItemVisual(e, i[n]))
				}
			})
		})
	}), af(function(t) {
		t.eachSeriesByType("graph", function(t) {
			var s = t.getGraph(),
				l = t.getEdgeData(),
				e = ow(t.get("edgeSymbol")),
				i = ow(t.get("edgeSymbolSize")),
				u = "lineStyle.color".split("."),
				h = "lineStyle.opacity".split(".");
			l.setVisual("fromSymbol", e && e[0]), l.setVisual("toSymbol", e && e[1]), l.setVisual("fromSymbolSize", i && i[
					0]), l.setVisual("toSymbolSize", i && i[1]), l.setVisual("color", t.get(u)), l.setVisual("opacity", t.get(h)),
				l.each(function(t) {
					var e = l.getItemModel(t),
						i = s.getEdgeByIndex(t),
						n = ow(e.getShallow("symbol", !0)),
						a = ow(e.getShallow("symbolSize", !0)),
						o = e.get(u),
						r = e.get(h);
					switch (o) {
						case "source":
							o = i.node1.getVisual("color");
							break;
						case "target":
							o = i.node2.getVisual("color")
					}
					n[0] && i.setVisual("fromSymbol", n[0]), n[1] && i.setVisual("toSymbol", n[1]), a[0] && i.setVisual(
						"fromSymbolSize", a[0]), a[1] && i.setVisual("toSymbolSize", a[1]), i.setVisual("color", o), i.setVisual(
						"opacity", r)
				})
		})
	}), nf(function(t, e) {
		t.eachSeriesByType("graph", function(t) {
			var e = t.get("layout"),
				i = t.coordinateSystem;
			if (i && "view" !== i.type) {
				var n = t.getData(),
					a = [];
				E(i.dimensions, function(t) {
					a = a.concat(n.mapDimension(t, !0))
				});
				for (var o = 0; o < n.count(); o++) {
					for (var r = [], s = !1, l = 0; l < a.length; l++) {
						var u = n.get(a[l], o);
						isNaN(u) || (s = !0), r.push(u)
					}
					s ? n.setItemLayout(o, i.dataToPoint(r)) : n.setItemLayout(o, [NaN, NaN])
				}
				sw(n.graph)
			} else e && "none" !== e || rw(t)
		})
	}), nf(cd.VISUAL.POST_CHART_LAYOUT, function(t) {
		t.eachSeriesByType("graph", function(t) {
			"circular" === t.get("layout") && hw(t, "symbolSize")
		})
	}), nf(function(t) {
		t.eachSeriesByType("graph", function(t) {
			if (!(l = t.coordinateSystem) || "view" === l.type)
				if ("force" === t.get("layout")) {
					var c = t.preservedPoints || {},
						d = t.getGraph(),
						f = d.data,
						e = d.edgeData,
						i = t.getModel("force"),
						n = i.get("initLayout");
					t.preservedPoints ? f.each(function(t) {
						var e = f.getId(t);
						f.setItemLayout(t, c[e] || [NaN, NaN])
					}) : n && "none" !== n ? "circular" === n && hw(t, "value") : rw(t);
					var a = f.getDataExtent("value"),
						o = e.getDataExtent("value"),
						r = i.get("repulsion"),
						s = i.get("edgeLength");
					k(r) || (r = [r, r]), k(s) || (s = [s, s]), s = [s[1], s[0]];
					var l, u = f.mapArray("value", function(t, e) {
							var i = f.getItemLayout(e),
								n = yl(t, a, r);
							return isNaN(n) && (n = (r[0] + r[1]) / 2), {
								w: n,
								rep: n,
								fixed: f.getItemModel(e).get("fixed"),
								p: !i || isNaN(i[0]) || isNaN(i[1]) ? null : i
							}
						}),
						h = e.mapArray("value", function(t, e) {
							var i = d.getEdgeByIndex(e),
								n = yl(t, o, s);
							isNaN(n) && (n = (s[0] + s[1]) / 2);
							var a = i.getModel();
							return {
								n1: u[i.node1.dataIndex],
								n2: u[i.node2.dataIndex],
								d: n,
								curveness: a.get("lineStyle.curveness") || 0,
								ignoreForceLayout: a.get("ignoreForceLayout")
							}
						}),
						p = (l = t.coordinateSystem).getBoundingRect(),
						g = function(f, p, t) {
							for (var e = t.rect, i = e.width, n = e.height, g = [e.x + i / 2, e.y + n / 2], m = null == t.gravity ? .1 :
									t.gravity, a = 0; a < f.length; a++) {
								var o = f[a];
								o.p || (o.p = at(i * (Math.random() - .5) + g[0], n * (Math.random() - .5) + g[1])), o.pp = rt(o.p), o.edges =
									null
							}
							var r = null == t.friction ? .6 : t.friction,
								v = r;
							return {
								warmUp: function() {
									v = .8 * r
								},
								setFixed: function(t) {
									f[t].fixed = !0
								},
								setUnfixed: function(t) {
									f[t].fixed = !1
								},
								step: function(t) {
									for (var e = [], i = f.length, n = 0; n < p.length; n++) {
										var a = p[n];
										if (!a.ignoreForceLayout) {
											var o = a.n1;
											ht(e, (u = a.n2).p, o.p);
											var r = ct(e) - a.d,
												s = u.w / (o.w + u.w);
											isNaN(s) && (s = 0), mt(e, e), o.fixed || dw(o.p, o.p, e, s * r * v), u.fixed || dw(u.p, u.p, e, -(1 -
												s) * r * v)
										}
									}
									for (n = 0; n < i; n++) {
										(d = f[n]).fixed || (ht(e, g, d.p), dw(d.p, d.p, e, m * v))
									}
									for (n = 0; n < i; n++) {
										o = f[n];
										for (var l = n + 1; l < i; l++) {
											var u;
											ht(e, (u = f[l]).p, o.p), 0 === (r = ct(e)) && (st(e, Math.random() - .5, Math.random() - .5), r = 1);
											var h = (o.rep + u.rep) / r / r;
											o.fixed || dw(o.pp, o.pp, e, h), u.fixed || dw(u.pp, u.pp, e, -h)
										}
									}
									var c = [];
									for (n = 0; n < i; n++) {
										var d;
										(d = f[n]).fixed || (ht(c, d.p, d.pp), dw(d.p, d.p, c, v), ot(d.pp, d.p))
									}
									v *= .992, t && t(f, p, v < .01)
								}
							}
						}(u, h, {
							rect: p,
							gravity: i.get("gravity"),
							friction: i.get("friction")
						}),
						m = g.step;
					g.step = function(h) {
						for (var t = 0, e = u.length; t < e; t++) u[t].fixed && ot(u[t].p, d.getNodeByIndex(t).getLayout());
						m(function(t, e, i) {
							for (var n = 0, a = t.length; n < a; n++) t[n].fixed || d.getNodeByIndex(n).setLayout(t[n].p), c[f.getId(
								n)] = t[n].p;
							for (n = 0, a = e.length; n < a; n++) {
								var o = e[n],
									r = d.getEdgeByIndex(n),
									s = o.n1.p,
									l = o.n2.p,
									u = r.getLayout();
								(u = u ? u.slice() : [])[0] = u[0] || [], u[1] = u[1] || [], ot(u[0], s), ot(u[1], l), +o.curveness &&
									(u[2] = [(s[0] + l[0]) / 2 - (s[1] - l[1]) * o.curveness, (s[1] + l[1]) / 2 - (l[0] - s[0]) * o.curveness]),
									r.setLayout(u)
							}
							h && h(i)
						})
					}, t.forceLayout = g, t.preservedPoints = c, g.step()
				} else t.forceLayout = null
		})
	}), ef("graphView", {
		create: function(t, d) {
			var f = [];
			return t.eachSeriesByType("graph", function(t) {
				var e = t.get("coordinateSystem");
				if (!e || "view" === e) {
					var i = t.getData(),
						n = [],
						a = [];
					Io(i.mapArray(function(t) {
						var e = i.getItemModel(t);
						return [+e.get("x"), +e.get("y")]
					}), n, a), a[0] - n[0] == 0 && (a[0] += 1, n[0] -= 1), a[1] - n[1] == 0 && (a[1] += 1, n[1] -= 1);
					var o = (a[0] - n[0]) / (a[1] - n[1]),
						r = function(t, e, i) {
							var n = t.getBoxLayoutParams();
							return n.aspect = i, au(n, {
								width: e.getWidth(),
								height: e.getHeight()
							})
						}(t, d, o);
					isNaN(o) && (n = [r.x, r.y], a = [r.x + r.width, r.y + r.height]);
					var s = a[0] - n[0],
						l = a[1] - n[1],
						u = r.width,
						h = r.height,
						c = t.coordinateSystem = new Py;
					c.zoomLimit = t.get("scaleLimit"), c.setBoundingRect(n[0], n[1], s, l), c.setViewRect(r.x, r.y, u, h), c.setCenter(
						t.get("center")), c.setZoom(t.get("zoom")), f.push(c)
				}
			}), f
		}
	});
	Wh.extend({
		type: "series.gauge",
		getInitialData: function(t, e) {
			return yv(this, ["value"])
		},
		defaultOption: {
			zlevel: 0,
			z: 2,
			center: ["50%", "50%"],
			legendHoverLink: !0,
			radius: "75%",
			startAngle: 225,
			endAngle: -45,
			clockwise: !0,
			min: 0,
			max: 100,
			splitNumber: 10,
			axisLine: {
				show: !0,
				lineStyle: {
					color: [
						[.2, "#91c7ae"],
						[.8, "#63869e"],
						[1, "#c23531"]
					],
					width: 30
				}
			},
			splitLine: {
				show: !0,
				length: 30,
				lineStyle: {
					color: "#eee",
					width: 2,
					type: "solid"
				}
			},
			axisTick: {
				show: !0,
				splitNumber: 5,
				length: 8,
				lineStyle: {
					color: "#eee",
					width: 1,
					type: "solid"
				}
			},
			axisLabel: {
				show: !0,
				distance: 5,
				color: "auto"
			},
			pointer: {
				show: !0,
				length: "80%",
				width: 8
			},
			itemStyle: {
				color: "auto"
			},
			title: {
				show: !0,
				offsetCenter: [0, "-40%"],
				color: "#333",
				fontSize: 15
			},
			detail: {
				show: !0,
				backgroundColor: "rgba(0,0,0,0)",
				borderWidth: 0,
				borderColor: "#ccc",
				width: 100,
				height: null,
				padding: [5, 10],
				offsetCenter: [0, "40%"],
				color: "auto",
				fontSize: 30
			}
		}
	});
	var fw = hr.extend({
		type: "echartsGaugePointer",
		shape: {
			angle: 0,
			width: 10,
			r: 10,
			x: 0,
			y: 0
		},
		buildPath: function(t, e) {
			var i = Math.cos,
				n = Math.sin,
				a = e.r,
				o = e.width,
				r = e.angle,
				s = e.x - i(r) * o * (a / 3 <= o ? 1 : 2),
				l = e.y - n(r) * o * (a / 3 <= o ? 1 : 2);
			r = e.angle - Math.PI / 2, t.moveTo(s, l), t.lineTo(e.x + i(r) * o, e.y + n(r) * o), t.lineTo(e.x + i(e.angle) *
				a, e.y + n(e.angle) * a), t.lineTo(e.x - i(r) * o, e.y - n(r) * o), t.lineTo(s, l)
		}
	});

	function pw(t, e) {
		return e && ("string" == typeof e ? t = e.replace("{value}", null != t ? t : "") : "function" == typeof e && (t = e(
			t))), t
	}
	var gw = 2 * Math.PI,
		mw = (ec.extend({
			type: "gauge",
			render: function(t, e, i) {
				this.group.removeAll();
				var n = t.get("axisLine.lineStyle.color"),
					a = function(t, e) {
						var i = t.get("center"),
							n = e.getWidth(),
							a = e.getHeight(),
							o = Math.min(n, a);
						return {
							cx: xl(i[0], e.getWidth()),
							cy: xl(i[1], e.getHeight()),
							r: xl(t.get("radius"), o / 2)
						}
					}(t, i);
				this._renderMain(t, e, i, n, a)
			},
			dispose: function() {},
			_renderMain: function(t, e, i, n, a) {
				for (var o = this.group, r = t.getModel("axisLine"), s = r.getModel("lineStyle"), l = t.get("clockwise"), u = -
						t.get("startAngle") / 180 * Math.PI, h = ((g = -t.get("endAngle") / 180 * Math.PI) - u) % gw, c = u, d = s.get(
							"width"), f = r.get("show"), p = 0; f && p < n.length; p++) {
					var g, m = Math.min(Math.max(n[p][0], 0), 1),
						v = new Pr({
							shape: {
								startAngle: c,
								endAngle: g = u + h * m,
								cx: a.cx,
								cy: a.cy,
								clockwise: l,
								r0: a.r - d,
								r: a.r
							},
							silent: !0
						});
					v.setStyle({
						fill: n[p][1]
					}), v.setStyle(s.getLineStyle(["color", "borderWidth", "borderColor"])), o.add(v), c = g
				}

				function y(t) {
					if (t <= 0) return n[0][1];
					for (var e = 0; e < n.length; e++)
						if (n[e][0] >= t && (0 === e ? 0 : n[e - 1][0]) < t) return n[e][1];
					return n[e - 1][1]
				}
				if (!l) {
					var x = u;
					u = g, g = x
				}
				this._renderTicks(t, e, i, y, a, u, g, l), this._renderPointer(t, e, i, y, a, u, g, l), this._renderTitle(t, e,
					i, y, a), this._renderDetail(t, e, i, y, a)
			},
			_renderTicks: function(t, e, i, n, a, o, r, s) {
				for (var l = this.group, u = a.cx, h = a.cy, c = a.r, d = +t.get("min"), f = +t.get("max"), p = t.getModel(
							"splitLine"), g = t.getModel("axisTick"), m = t.getModel("axisLabel"), v = t.get("splitNumber"), y = g.get(
							"splitNumber"), x = xl(p.get("length"), c), _ = xl(g.get("length"), c), w = o, b = (r - o) / v, S = b / y, M =
						p.getModel("lineStyle").getLineStyle(), I = g.getModel("lineStyle").getLineStyle(), A = 0; A <= v; A++) {
					var T = Math.cos(w),
						D = Math.sin(w);
					if (p.get("show")) {
						var C = new Ur({
							shape: {
								x1: T * c + u,
								y1: D * c + h,
								x2: T * (c - x) + u,
								y2: D * (c - x) + h
							},
							style: M,
							silent: !0
						});
						"auto" === M.stroke && C.setStyle({
							stroke: n(A / v)
						}), l.add(C)
					}
					if (m.get("show")) {
						var L = pw(_l(A / v * (f - d) + d), m.get("formatter")),
							k = m.get("distance"),
							P = n(A / v);
						l.add(new Dr({
							style: Gs({}, m, {
								text: L,
								x: T * (c - x - k) + u,
								y: D * (c - x - k) + h,
								textVerticalAlign: D < -.4 ? "top" : .4 < D ? "bottom" : "middle",
								textAlign: T < -.4 ? "left" : .4 < T ? "right" : "center"
							}, {
								autoColor: P
							}),
							silent: !0
						}))
					}
					if (g.get("show") && A !== v) {
						for (var N = 0; N <= y; N++) {
							T = Math.cos(w), D = Math.sin(w);
							var O = new Ur({
								shape: {
									x1: T * c + u,
									y1: D * c + h,
									x2: T * (c - _) + u,
									y2: D * (c - _) + h
								},
								silent: !0,
								style: I
							});
							"auto" === I.stroke && O.setStyle({
								stroke: n((A + N / y) / v)
							}), l.add(O), w += S
						}
						w -= S
					} else w += b
				}
			},
			_renderPointer: function(n, t, e, a, o, i, r, s) {
				var l = this.group,
					u = this._data;
				if (n.get("pointer.show")) {
					var h = [+n.get("min"), +n.get("max")],
						c = [i, r],
						d = n.getData(),
						f = d.mapDimension("value");
					d.diff(u).add(function(t) {
						var e = new fw({
							shape: {
								angle: i
							}
						});
						qs(e, {
							shape: {
								angle: yl(d.get(f, t), h, c, !0)
							}
						}, n), l.add(e), d.setItemGraphicEl(t, e)
					}).update(function(t, e) {
						var i = u.getItemGraphicEl(e);
						js(i, {
							shape: {
								angle: yl(d.get(f, t), h, c, !0)
							}
						}, n), l.add(i), d.setItemGraphicEl(t, i)
					}).remove(function(t) {
						var e = u.getItemGraphicEl(t);
						l.remove(e)
					}).execute(), d.eachItemGraphicEl(function(t, e) {
						var i = d.getItemModel(e),
							n = i.getModel("pointer");
						t.setShape({
							x: o.cx,
							y: o.cy,
							width: xl(n.get("width"), o.r),
							r: xl(n.get("length"), o.r)
						}), t.useStyle(i.getModel("itemStyle").getItemStyle()), "auto" === t.style.fill && t.setStyle("fill", a(yl(
							d.get(f, e), h, [0, 1], !0))), Os(t, i.getModel("emphasis.itemStyle").getItemStyle())
					}), this._data = d
				} else u && u.eachItemGraphicEl(function(t) {
					l.remove(t)
				})
			},
			_renderTitle: function(t, e, i, n, a) {
				var o = t.getData(),
					r = o.mapDimension("value"),
					s = t.getModel("title");
				if (s.get("show")) {
					var l = s.get("offsetCenter"),
						u = a.cx + xl(l[0], a.r),
						h = a.cy + xl(l[1], a.r),
						c = +t.get("min"),
						d = +t.get("max"),
						f = n(yl(t.getData().get(r, 0), [c, d], [0, 1], !0));
					this.group.add(new Dr({
						silent: !0,
						style: Gs({}, s, {
							x: u,
							y: h,
							text: o.getName(0),
							textAlign: "center",
							textVerticalAlign: "middle"
						}, {
							autoColor: f,
							forceRich: !0
						})
					}))
				}
			},
			_renderDetail: function(t, e, i, n, a) {
				var o = t.getModel("detail"),
					r = +t.get("min"),
					s = +t.get("max");
				if (o.get("show")) {
					var l = o.get("offsetCenter"),
						u = a.cx + xl(l[0], a.r),
						h = a.cy + xl(l[1], a.r),
						c = xl(o.get("width"), a.r),
						d = xl(o.get("height"), a.r),
						f = t.getData(),
						p = f.get(f.mapDimension("value"), 0),
						g = n(yl(p, [r, s], [0, 1], !0));
					this.group.add(new Dr({
						silent: !0,
						style: Gs({}, o, {
							x: u,
							y: h,
							text: pw(p, o.get("formatter")),
							textWidth: isNaN(c) ? null : c,
							textHeight: isNaN(d) ? null : d,
							textAlign: "center",
							textVerticalAlign: "middle"
						}, {
							autoColor: g,
							forceRich: !0
						})
					}))
				}
			}
		}), uf({
			type: "series.funnel",
			init: function(t) {
				mw.superApply(this, "init", arguments), this.legendDataProvider = function() {
					return this.getRawData()
				}, this._defaultLabelLine(t)
			},
			getInitialData: function(t, e) {
				return yv(this, ["value"])
			},
			_defaultLabelLine: function(t) {
				ba(t, "labelLine", ["show"]);
				var e = t.labelLine,
					i = t.emphasis.labelLine;
				e.show = e.show && t.label.show, i.show = i.show && t.emphasis.label.show
			},
			getDataParams: function(t) {
				var e = this.getData(),
					i = mw.superCall(this, "getDataParams", t),
					n = e.mapDimension("value"),
					a = e.getSum(n);
				return i.percent = a ? +(e.get(n, t) / a * 100).toFixed(2) : 0, i.$vars.push("percent"), i
			},
			defaultOption: {
				zlevel: 0,
				z: 2,
				legendHoverLink: !0,
				left: 80,
				top: 60,
				right: 80,
				bottom: 60,
				minSize: "0%",
				maxSize: "100%",
				sort: "descending",
				gap: 0,
				funnelAlign: "center",
				label: {
					show: !0,
					position: "outer"
				},
				labelLine: {
					show: !0,
					length: 20,
					lineStyle: {
						width: 1,
						type: "solid"
					}
				},
				itemStyle: {
					borderColor: "#fff",
					borderWidth: 1
				},
				emphasis: {
					label: {
						show: !0
					}
				}
			}
		}));

	function vw(t, e) {
		Si.call(this);
		var i = new Rr,
			n = new zr,
			a = new Dr;
		this.add(i), this.add(n), this.add(a), this.highDownOnUpdate = function(t, e) {
			"emphasis" === e ? (n.ignore = n.hoverIgnore, a.ignore = a.hoverIgnore) : (n.ignore = n.normalIgnore, a.ignore = a
				.normalIgnore)
		}, this.updateData(t, e, !0)
	}
	var yw = vw.prototype,
		xw = ["itemStyle", "opacity"];
	yw.updateData = function(t, e, i) {
		var n = this.childAt(0),
			a = t.hostModel,
			o = t.getItemModel(e),
			r = t.getItemLayout(e),
			s = t.getItemModel(e).get(xw);
		s = null == s ? 1 : s, n.useStyle({}), i ? (n.setShape({
			points: r.points
		}), n.setStyle({
			opacity: 0
		}), qs(n, {
			style: {
				opacity: s
			}
		}, a, e)) : js(n, {
			style: {
				opacity: s
			},
			shape: {
				points: r.points
			}
		}, a, e);
		var l = o.getModel("itemStyle"),
			u = t.getItemVisual(e, "color");
		n.setStyle(C({
				lineJoin: "round",
				fill: u
			}, l.getItemStyle(["opacity"]))), n.hoverStyle = l.getModel("emphasis").getItemStyle(), this._updateLabel(t, e),
			Os(this)
	}, yw._updateLabel = function(t, e) {
		var i = this.childAt(1),
			n = this.childAt(2),
			a = t.hostModel,
			o = t.getItemModel(e),
			r = t.getItemLayout(e).label,
			s = t.getItemVisual(e, "color");
		js(i, {
			shape: {
				points: r.linePoints || r.linePoints
			}
		}, a, e), js(n, {
			style: {
				x: r.x,
				y: r.y
			}
		}, a, e), n.attr({
			rotation: r.rotation,
			origin: [r.x, r.y],
			z2: 10
		});
		var l = o.getModel("label"),
			u = o.getModel("emphasis.label"),
			h = o.getModel("labelLine"),
			c = o.getModel("emphasis.labelLine");
		s = t.getItemVisual(e, "color");
		Bs(n.style, n.hoverStyle = {}, l, u, {
			labelFetcher: t.hostModel,
			labelDataIndex: e,
			defaultText: t.getName(e),
			autoColor: s,
			useInsideStyle: !!r.inside
		}, {
			textAlign: r.textAlign,
			textVerticalAlign: r.verticalAlign
		}), n.ignore = n.normalIgnore = !l.get("show"), n.hoverIgnore = !u.get("show"), i.ignore = i.normalIgnore = !h.get(
			"show"), i.hoverIgnore = !c.get("show"), i.setStyle({
			stroke: s
		}), i.setStyle(h.getModel("lineStyle").getLineStyle()), i.hoverStyle = c.getModel("lineStyle").getLineStyle()
	}, w(vw, Si);
	ec.extend({
		type: "funnel",
		render: function(t, e, i) {
			var n = t.getData(),
				a = this._data,
				o = this.group;
			n.diff(a).add(function(t) {
				var e = new vw(n, t);
				n.setItemGraphicEl(t, e), o.add(e)
			}).update(function(t, e) {
				var i = a.getItemGraphicEl(e);
				i.updateData(n, t), o.add(i), n.setItemGraphicEl(t, i)
			}).remove(function(t) {
				var e = a.getItemGraphicEl(t);
				o.remove(e)
			}).execute(), this._data = n
		},
		remove: function() {
			this.group.removeAll(), this._data = null
		},
		dispose: function() {}
	});
	af(Av("funnel")), nf(function(t, w, e) {
		t.eachSeriesByType("funnel", function(t) {
			var a = t.getData(),
				o = a.mapDimension("value"),
				e = t.get("sort"),
				r = function(t, e) {
					return au(t.getBoxLayoutParams(), {
						width: e.getWidth(),
						height: e.getHeight()
					})
				}(t, w),
				i = function(t, e) {
					for (var i = t.mapDimension("value"), n = t.mapArray(i, function(t) {
							return t
						}), a = [], o = "ascending" === e, r = 0, s = t.count(); r < s; r++) a[r] = r;
					return "function" == typeof e ? a.sort(e) : "none" !== e && a.sort(function(t, e) {
						return o ? n[t] - n[e] : n[e] - n[t]
					}), a
				}(a, e),
				s = [xl(t.get("minSize"), r.width), xl(t.get("maxSize"), r.width)],
				n = a.getDataExtent(o),
				l = t.get("min"),
				u = t.get("max");
			null == l && (l = Math.min(n[0], 0)), null == u && (u = n[1]);

			function h(t, e) {
				var i, n = yl(a.get(o, t) || 0, [l, u], s, !0);
				switch (c) {
					case "left":
						i = r.x;
						break;
					case "center":
						i = r.x + (r.width - n) / 2;
						break;
					case "right":
						i = r.x + r.width - n
				}
				return [
					[i, e],
					[i + n, e]
				]
			}
			var c = t.get("funnelAlign"),
				d = t.get("gap"),
				f = (r.height - d * (a.count() - 1)) / a.count(),
				p = r.y;
			"ascending" === e && (f = -f, d = -d, p += r.height, i = i.reverse());
			for (var g = 0; g < i.length; g++) {
				var m = i[g],
					v = i[g + 1],
					y = a.getItemModel(m).get("itemStyle.height");
				null == y ? y = f : (y = xl(y, r.height), "ascending" === e && (y = -y));
				var x = h(m, p),
					_ = h(v, p + y);
				p += y + d, a.setItemLayout(m, {
					points: x.concat(_.slice().reverse())
				})
			}! function(g) {
				g.each(function(t) {
					var e, i, n, a, o = g.getItemModel(t),
						r = o.getModel("label").get("position"),
						s = o.getModel("labelLine"),
						l = g.getItemLayout(t),
						u = l.points,
						h = "inner" === r || "inside" === r || "center" === r || "insideLeft" === r || "insideRight" === r;
					if (h) e = "insideLeft" === r ? (i = (u[0][0] + u[3][0]) / 2 + 5, n = (u[0][1] + u[3][1]) / 2, "left") :
						"insideRight" === r ? (i = (u[1][0] + u[2][0]) / 2 - 5, n = (u[1][1] + u[2][1]) / 2, "right") : (i = (u[0]
							[0] + u[1][0] + u[2][0] + u[3][0]) / 4, n = (u[0][1] + u[1][1] + u[2][1] + u[3][1]) / 4, "center"), a = [
							[i, n],
							[i, n]
						];
					else {
						var c, d, f, p = s.get("length");
						e = "left" === r ? (c = (u[3][0] + u[0][0]) / 2, d = (u[3][1] + u[0][1]) / 2, i = (f = c - p) - 5, "right") :
							"right" === r ? (c = (u[1][0] + u[2][0]) / 2, d = (u[1][1] + u[2][1]) / 2, i = (f = c + p) + 5, "left") :
							"rightTop" === r ? (c = u[1][0], d = u[1][1], i = (f = c + p) + 5, "top") : "rightBottom" === r ? (c = u[
								2][0], d = u[2][1], i = (f = c + p) + 5, "bottom") : "leftTop" === r ? (c = u[0][0], d = u[1][1], i = (f =
								c - p) - 5, "right") : "leftBottom" === r ? (c = u[3][0], d = u[2][1], i = (f = c - p) - 5, "right") : (
								c = (u[1][0] + u[2][0]) / 2, d = (u[1][1] + u[2][1]) / 2, i = (f = c + p) + 5, "left");
						a = [
							[c, d],
							[f, d]
						], n = d
					}
					l.label = {
						linePoints: a,
						x: i,
						y: n,
						verticalAlign: "middle",
						textAlign: e,
						inside: h
					}
				})
			}(a)
		})
	}), Qd(kv("funnel"));

	function _w(t, e, i, n, a) {
		vg.call(this, t, e, i), this.type = n || "value", this.axisIndex = a
	}
	_w.prototype = {
		constructor: _w,
		model: null,
		isHorizontal: function() {
			return "horizontal" !== this.coordinateSystem.getModel().get("layout")
		}
	}, w(_w, vg);

	function ww(t, e, i, n, a, o) {
		t = t || 0;
		var r = i[1] - i[0];
		if (null != a && (a = Sw(a, [0, r])), null != o && (o = Math.max(o, null != a ? a : 0)), "all" === n) {
			var s = Math.abs(e[1] - e[0]);
			a = o = Sw(s = Sw(s, [0, r]), [a, o]), n = 0
		}
		e[0] = Sw(e[0], i), e[1] = Sw(e[1], i);
		var l = bw(e, n);
		e[n] += t;
		var u = a || 0,
			h = i.slice();
		l.sign < 0 ? h[0] += u : h[1] -= u, e[n] = Sw(e[n], h);
		var c = bw(e, n);
		return null != a && (c.sign !== l.sign || c.span < a) && (e[1 - n] = e[n] + l.sign * a), c = bw(e, n), null != o &&
			c.span > o && (e[1 - n] = e[n] + c.sign * o), e
	}

	function bw(t, e) {
		var i = t[e] - t[1 - e];
		return {
			span: Math.abs(i),
			sign: 0 < i ? -1 : i < 0 ? 1 : e ? -1 : 1
		}
	}

	function Sw(t, e) {
		return Math.min(null != e[1] ? e[1] : 1 / 0, Math.max(null != e[0] ? e[0] : -1 / 0, t))
	}
	var Mw = E,
		Iw = Math.min,
		Aw = Math.max,
		Tw = Math.floor,
		Dw = Math.ceil,
		Cw = _l,
		Lw = Math.PI;

	function kw(t, e, i) {
		this._axesMap = Q(), this._axesLayout = {}, this.dimensions = t.dimensions, this._rect, this._model = t, this._init(
			t, e, i)
	}

	function Pw(t, e) {
		return Iw(Aw(t, e[0]), e[1])
	}
	kw.prototype = {
		type: "parallel",
		constructor: kw,
		_init: function(t, r, e) {
			var i = t.dimensions,
				s = t.parallelAxisIndex;
			Mw(i, function(t, e) {
				var i = s[e],
					n = r.getComponent("parallelAxis", i),
					a = this._axesMap.set(t, new _w(t, Bp(n), [0, 0], n.get("type"), i)),
					o = "category" === a.type;
				a.onBand = o && n.get("boundaryGap"), a.inverse = n.get("inverse"), (n.axis = a).model = n, a.coordinateSystem =
					n.coordinateSystem = this
			}, this)
		},
		update: function(t, e) {
			this._updateAxesFromSeries(this._model, t)
		},
		containPoint: function(t) {
			var e = this._makeLayoutInfo(),
				i = e.axisBase,
				n = e.layoutBase,
				a = e.pixelDimIndex,
				o = t[1 - a],
				r = t[a];
			return i <= o && o <= i + e.axisLength && n <= r && r <= n + e.layoutLength
		},
		getModel: function() {
			return this._model
		},
		_updateAxesFromSeries: function(e, n) {
			n.eachSeries(function(t) {
				if (e.contains(t, n)) {
					var i = t.getData();
					Mw(this.dimensions, function(t) {
						var e = this._axesMap.get(t);
						e.scale.unionExtentFromData(i, i.mapDimension(t)), zp(e.scale, e.model)
					}, this)
				}
			}, this)
		},
		resize: function(t, e) {
			this._rect = au(t.getBoxLayoutParams(), {
				width: e.getWidth(),
				height: e.getHeight()
			}), this._layoutAxes()
		},
		getRect: function() {
			return this._rect
		},
		_makeLayoutInfo: function() {
			var t, e = this._model,
				i = this._rect,
				n = ["x", "y"],
				a = ["width", "height"],
				o = e.get("layout"),
				r = "horizontal" === o ? 0 : 1,
				s = i[a[r]],
				l = [0, s],
				u = this.dimensions.length,
				h = Pw(e.get("axisExpandWidth"), l),
				c = Pw(e.get("axisExpandCount") || 0, [0, u]),
				d = e.get("axisExpandable") && 3 < u && c < u && 1 < c && 0 < h && 0 < s,
				f = e.get("axisExpandWindow");
			f ? (t = Pw(f[1] - f[0], l), f[1] = f[0] + t) : (t = Pw(h * (c - 1), l), (f = [h * (e.get("axisExpandCenter") ||
				Tw(u / 2)) - t / 2])[1] = f[0] + t);
			var p = (s - t) / (u - c);
			p < 3 && (p = 0);
			var g = [Tw(Cw(f[0] / h, 1)) + 1, Dw(Cw(f[1] / h, 1)) - 1],
				m = p / h * f[0];
			return {
				layout: o,
				pixelDimIndex: r,
				layoutBase: i[n[r]],
				layoutLength: s,
				axisBase: i[n[1 - r]],
				axisLength: i[a[1 - r]],
				axisExpandable: d,
				axisExpandWidth: h,
				axisCollapseWidth: p,
				axisExpandWindow: f,
				axisCount: u,
				winInnerIndices: g,
				axisExpandWindow0Pos: m
			}
		},
		_layoutAxes: function() {
			var l = this._rect,
				t = this._axesMap,
				e = this.dimensions,
				u = this._makeLayoutInfo(),
				h = u.layout;
			t.each(function(t) {
				var e = [0, u.axisLength],
					i = t.inverse ? 1 : 0;
				t.setExtent(e[i], e[1 - i])
			}), Mw(e, function(t, e) {
				var i = (u.axisExpandable ? function(t, e) {
						var i, n, a = e.layoutLength,
							o = e.axisExpandWidth,
							r = e.axisCount,
							s = e.axisCollapseWidth,
							l = e.winInnerIndices,
							u = s,
							h = !1;
						t < l[0] ? (i = t * s, n = s) : t <= l[1] ? (i = e.axisExpandWindow0Pos + t * o - e.axisExpandWindow[0], u =
							o, h = !0) : (i = a - (r - 1 - t) * s, n = s);
						return {
							position: i,
							axisNameAvailableWidth: u,
							axisLabelShow: h,
							nameTruncateMaxWidth: n
						}
					} : function(t, e) {
						var i = e.layoutLength / (e.axisCount - 1);
						return {
							position: i * t,
							axisNameAvailableWidth: i,
							axisLabelShow: !0
						}
					})(e, u),
					n = {
						horizontal: {
							x: i.position,
							y: u.axisLength
						},
						vertical: {
							x: 0,
							y: i.position
						}
					},
					a = {
						horizontal: Lw / 2,
						vertical: 0
					},
					o = [n[h].x + l.x, n[h].y + l.y],
					r = a[h],
					s = Qt();
				ae(s, s, r), ne(s, s, o), this._axesLayout[t] = {
					position: o,
					rotation: r,
					transform: s,
					axisNameAvailableWidth: i.axisNameAvailableWidth,
					axisLabelShow: i.axisLabelShow,
					nameTruncateMaxWidth: i.nameTruncateMaxWidth,
					tickDirection: 1,
					labelDirection: 1
				}
			}, this)
		},
		getAxis: function(t) {
			return this._axesMap.get(t)
		},
		dataToPoint: function(t, e) {
			return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t), e)
		},
		eachActiveState: function(e, t, i, n) {
			null == i && (i = 0), null == n && (n = e.count());
			var a = this._axesMap,
				o = this.dimensions,
				r = [],
				s = [];
			E(o, function(t) {
				r.push(e.mapDimension(t)), s.push(a.get(t).model)
			});
			for (var l = this.hasAxisBrushed(), u = i; u < n; u++) {
				var h;
				if (l) {
					h = "active";
					for (var c = e.getValues(r, u), d = 0, f = o.length; d < f; d++) {
						if ("inactive" === s[d].getActiveState(c[d])) {
							h = "inactive";
							break
						}
					}
				} else h = "normal";
				t(h, u)
			}
		},
		hasAxisBrushed: function() {
			for (var t = this.dimensions, e = this._axesMap, i = !1, n = 0, a = t.length; n < a; n++) "normal" !== e.get(t[n])
				.model.getActiveState() && (i = !0);
			return i
		},
		axisCoordToPoint: function(t, e) {
			return $s([t, 0], this._axesLayout[e].transform)
		},
		getAxisLayout: function(t) {
			return D(this._axesLayout[t])
		},
		getSlidedAxisExpandWindow: function(t) {
			var e = this._makeLayoutInfo(),
				i = e.pixelDimIndex,
				n = e.axisExpandWindow.slice(),
				a = n[1] - n[0],
				o = [0, e.axisExpandWidth * (e.axisCount - 1)];
			if (!this.containPoint(t)) return {
				behavior: "none",
				axisExpandWindow: n
			};
			var r, s = t[i] - e.layoutBase - e.axisExpandWindow0Pos,
				l = "slide",
				u = e.axisCollapseWidth,
				h = this._model.get("axisExpandSlideTriggerArea"),
				c = null != h[0];
			if (u) c && u && s < a * h[0] ? (l = "jump", r = s - a * h[2]) : c && u && s > a * (1 - h[0]) ? (l = "jump", r =
				s - a * (1 - h[2])) : 0 <= (r = s - a * h[1]) && (r = s - a * (1 - h[1])) <= 0 && (r = 0), (r *= e.axisExpandWidth /
				u) ? ww(r, n, o, "all") : l = "none";
			else {
				a = n[1] - n[0];
				(n = [Aw(0, o[1] * s / a - a / 2)])[1] = Iw(o[1], n[0] + a), n[0] = n[1] - a
			}
			return {
				axisExpandWindow: n,
				behavior: l
			}
		}
	}, Hu.register("parallel", {
		create: function(n, a) {
			var o = [];
			return n.eachComponent("parallel", function(t, e) {
				var i = new kw(t, n, a);
				i.name = "parallel_" + e, i.resize(t, a), (t.coordinateSystem = i).model = t, o.push(i)
			}), n.eachSeries(function(t) {
				if ("parallel" === t.get("coordinateSystem")) {
					var e = n.queryComponents({
						mainType: "parallel",
						index: t.get("parallelIndex"),
						id: t.get("parallelId")
					})[0];
					t.coordinateSystem = e.coordinateSystem
				}
			}), o
		}
	});
	var Nw = fu.extend({
		type: "baseParallelAxis",
		axis: null,
		activeIntervals: [],
		getAreaSelectStyle: function() {
			return Xa([
				["fill", "color"],
				["lineWidth", "borderWidth"],
				["stroke", "borderColor"],
				["width", "width"],
				["opacity", "opacity"]
			])(this.getModel("areaSelectStyle"))
		},
		setActiveIntervals: function(t) {
			var e = this.activeIntervals = D(t);
			if (e)
				for (var i = e.length - 1; 0 <= i; i--) wl(e[i])
		},
		getActiveState: function(t) {
			var e = this.activeIntervals;
			if (!e.length) return "normal";
			if (null == t || isNaN(t)) return "inactive";
			if (1 === e.length) {
				var i = e[0];
				if (i[0] <= t && t <= i[1]) return "active"
			} else
				for (var n = 0, a = e.length; n < a; n++)
					if (e[n][0] <= t && t <= e[n][1]) return "active";
			return "inactive"
		}
	});
	m(Nw.prototype, Hp), mm("parallel", Nw, function(t, e) {
		return e.type || (e.data ? "category" : "value")
	}, {
		type: "value",
		dim: null,
		areaSelectStyle: {
			width: 20,
			borderWidth: 1,
			borderColor: "rgba(160,197,232)",
			color: "rgba(160,197,232)",
			opacity: .3
		},
		realtime: !0,
		z: 10
	}), fu.extend({
		type: "parallel",
		dependencies: ["parallelAxis"],
		coordinateSystem: null,
		dimensions: null,
		parallelAxisIndex: null,
		layoutMode: "box",
		defaultOption: {
			zlevel: 0,
			z: 0,
			left: 80,
			top: 60,
			right: 80,
			bottom: 60,
			layout: "horizontal",
			axisExpandable: !1,
			axisExpandCenter: null,
			axisExpandCount: 0,
			axisExpandWidth: 50,
			axisExpandRate: 17,
			axisExpandDebounce: 50,
			axisExpandSlideTriggerArea: [-.15, .05, .4],
			axisExpandTriggerOn: "click",
			parallelAxisDefault: null
		},
		init: function() {
			fu.prototype.init.apply(this, arguments), this.mergeOption({})
		},
		mergeOption: function(t) {
			var e = this.option;
			t && m(e, t, !0), this._initDimensions()
		},
		contains: function(t, e) {
			var i = t.get("parallelIndex");
			return null != i && e.getComponent("parallel", i) === this
		},
		setAxisExpand: function(e) {
			E(["axisExpandable", "axisExpandCenter", "axisExpandCount", "axisExpandWidth", "axisExpandWindow"], function(t) {
				e.hasOwnProperty(t) && (this.option[t] = e[t])
			}, this)
		},
		_initDimensions: function() {
			var e = this.dimensions = [],
				i = this.parallelAxisIndex = [];
			E(M(this.dependentModels.parallelAxis, function(t) {
				return (t.get("parallelIndex") || 0) === this.componentIndex
			}, this), function(t) {
				e.push("dim" + t.get("dim")), i.push(t.componentIndex)
			})
		}
	});
	tf({
		type: "axisAreaSelect",
		event: "axisAreaSelected"
	}, function(e, t) {
		t.eachComponent({
			mainType: "parallelAxis",
			query: e
		}, function(t) {
			t.axis.model.setActiveIntervals(e.intervals)
		})
	}), tf("parallelAxisExpand", function(e, t) {
		t.eachComponent({
			mainType: "parallel",
			query: e
		}, function(t) {
			t.setAxisExpand(e)
		})
	});
	var Ow = A,
		Ew = E,
		Rw = N,
		zw = Math.min,
		Bw = Math.max,
		Vw = Math.pow,
		Gw = 1e4,
		Fw = 6,
		Ww = 6,
		Hw = "globalPan",
		Zw = {
			w: [0, 0],
			e: [0, 1],
			n: [1, 0],
			s: [1, 1]
		},
		Uw = {
			w: "ew",
			e: "ew",
			n: "ns",
			s: "ns",
			ne: "nesw",
			sw: "nesw",
			nw: "nwse",
			se: "nwse"
		},
		Xw = {
			brushStyle: {
				lineWidth: 2,
				stroke: "rgba(0,0,0,0.3)",
				fill: "rgba(0,0,0,0.1)"
			},
			transformable: !0,
			brushMode: "single",
			removeOnClick: !1
		},
		Yw = 0;

	function jw(t) {
		Ct.call(this), this._zr = t, this.group = new Si, this._brushType, this._brushOption, this._panels, this._track = [],
			this._dragging, this._lastMouseMovePoint = {}, this._covers = [], this._creatingCover, this._creatingPanel, this._enableGlobalPan,
			this._uid = "brushController_" + Yw++, this._handlers = {}, Ew(_b, function(t, e) {
				this._handlers[e] = T(t, this)
			}, this)
	}

	function qw(t, e) {
		var i = bb[e.brushType].createCover(t, e);
		return i.__brushOption = e, Jw(i, e), t.group.add(i), i
	}

	function Kw(t, e) {
		var i = tb(e);
		return i.endCreating && (i.endCreating(t, e), Jw(e, e.__brushOption)), e
	}

	function $w(t, e) {
		var i = e.__brushOption;
		tb(e).updateCoverShape(t, e, i.range, i)
	}

	function Jw(t, e) {
		var i = e.z;
		null == i && (i = Gw), t.traverse(function(t) {
			t.z = i, t.z2 = i
		})
	}

	function Qw(t, e) {
		tb(e).updateCommon(t, e), $w(t, e)
	}

	function tb(t) {
		return bb[t.__brushOption.brushType]
	}

	function eb(t, e, i) {
		var n, a = t._panels;
		if (!a) return !0;
		var o = t._transform;
		return Ew(a, function(t) {
			t.isTargetByCursor(e, i, o) && (n = t)
		}), n
	}

	function ib(t, e) {
		var i = t._panels;
		if (!i) return !0;
		var n = e.__brushOption.panelId;
		return null == n || i[n]
	}

	function nb(e) {
		var t = e._covers,
			i = t.length;
		return Ew(t, function(t) {
			e.group.remove(t)
		}, e), t.length = 0, !!i
	}

	function ab(t, e) {
		var i = Rw(t._covers, function(t) {
			var e = t.__brushOption,
				i = D(e.range);
			return {
				brushType: e.brushType,
				panelId: e.panelId,
				range: i
			}
		});
		t.trigger("brush", i, {
			isEnd: !!e.isEnd,
			removeOnClick: !!e.removeOnClick
		})
	}

	function ob(t) {
		var e = t.length - 1;
		return e < 0 && (e = 0), [t[0], t[e]]
	}

	function rb(e, i, t, n) {
		var a = new Si;
		return a.add(new Hr({
			name: "main",
			style: hb(t),
			silent: !0,
			draggable: !0,
			cursor: "move",
			drift: Ow(e, i, a, "nswe"),
			ondragend: Ow(ab, i, {
				isEnd: !0
			})
		})), Ew(n, function(t) {
			a.add(new Hr({
				name: t,
				style: {
					opacity: 0
				},
				draggable: !0,
				silent: !0,
				invisible: !0,
				drift: Ow(e, i, a, t),
				ondragend: Ow(ab, i, {
					isEnd: !0
				})
			}))
		}), a
	}

	function sb(t, e, i, n) {
		var a = n.brushStyle.lineWidth || 0,
			o = Bw(a, Ww),
			r = i[0][0],
			s = i[1][0],
			l = r - a / 2,
			u = s - a / 2,
			h = i[0][1],
			c = i[1][1],
			d = h - o + a / 2,
			f = c - o + a / 2,
			p = h - r,
			g = c - s,
			m = p + a,
			v = g + a;
		ub(t, e, "main", r, s, p, g), n.transformable && (ub(t, e, "w", l, u, o, v), ub(t, e, "e", d, u, o, v), ub(t, e, "n",
			l, u, m, o), ub(t, e, "s", l, f, m, o), ub(t, e, "nw", l, u, o, o), ub(t, e, "ne", d, u, o, o), ub(t, e, "sw", l,
			f, o, o), ub(t, e, "se", d, f, o, o))
	}

	function lb(n, a) {
		var t = a.__brushOption,
			o = t.transformable,
			e = a.childAt(0);
		e.useStyle(hb(t)), e.attr({
			silent: !o,
			cursor: o ? "move" : "default"
		}), Ew(["w", "e", "n", "s", "se", "sw", "ne", "nw"], function(t) {
			var e = a.childOfName(t),
				i = function t(e, i) {
					{
						if (1 < i.length) {
							i = i.split("");
							var n = [t(e, i[0]), t(e, i[1])];
							return "e" !== n[0] && "w" !== n[0] || n.reverse(), n.join("")
						}
						var a = {
								w: "left",
								e: "right",
								n: "top",
								s: "bottom"
							},
							o = {
								left: "w",
								right: "e",
								top: "n",
								bottom: "s"
							},
							n = Js(a[i], Ks(e.group));
						return o[n]
					}
				}(n, t);
			e && e.attr({
				silent: !o,
				invisible: !o,
				cursor: o ? Uw[i] + "-resize" : null
			})
		})
	}

	function ub(t, e, i, n, a, o, r) {
		var s = e.childOfName(i);
		s && s.setShape(function(t) {
			var e = zw(t[0][0], t[1][0]),
				i = zw(t[0][1], t[1][1]),
				n = Bw(t[0][0], t[1][0]),
				a = Bw(t[0][1], t[1][1]);
			return {
				x: e,
				y: i,
				width: n - e,
				height: a - i
			}
		}(gb(t, e, [
			[n, a],
			[n + o, a + r]
		])))
	}

	function hb(t) {
		return C({
			strokeNoScale: !0
		}, t.brushStyle)
	}

	function cb(t, e, i, n) {
		var a = [zw(t, i), zw(e, n)],
			o = [Bw(t, i), Bw(e, n)];
		return [
			[a[0], o[0]],
			[a[1], o[1]]
		]
	}

	function db(t, e, i, n, a, o, r, s) {
		var l = n.__brushOption,
			u = t(l.range),
			h = pb(i, o, r);
		Ew(a.split(""), function(t) {
			var e = Zw[t];
			u[e[0]][e[1]] += h[e[0]]
		}), l.range = e(cb(u[0][0], u[1][0], u[0][1], u[1][1])), Qw(i, n), ab(i, {
			isEnd: !1
		})
	}

	function fb(t, e, i, n, a) {
		var o = e.__brushOption.range,
			r = pb(t, i, n);
		Ew(o, function(t) {
			t[0] += r[0], t[1] += r[1]
		}), Qw(t, e), ab(t, {
			isEnd: !1
		})
	}

	function pb(t, e, i) {
		var n = t.group,
			a = n.transformCoordToLocal(e, i),
			o = n.transformCoordToLocal(0, 0);
		return [a[0] - o[0], a[1] - o[1]]
	}

	function gb(t, e, i) {
		var n = ib(t, e);
		return n && !0 !== n ? n.clipPath(i, t._transform) : D(i)
	}

	function mb(t) {
		var e = t.event;
		e.preventDefault && e.preventDefault()
	}

	function vb(t, e, i) {
		return t.childOfName("main").contain(e, i)
	}

	function yb(t, e, i, n) {
		var a, o = t._creatingCover,
			r = t._creatingPanel,
			s = t._brushOption;
		if (t._track.push(i.slice()), function(t) {
				var e = t._track;
				if (!e.length) return !1;
				var i = e[e.length - 1],
					n = e[0],
					a = i[0] - n[0],
					o = i[1] - n[1],
					r = Vw(a * a + o * o, .5);
				return Fw < r
			}(t) || o) {
			if (r && !o) {
				"single" === s.brushMode && nb(t);
				var l = D(s);
				l.brushType = xb(l.brushType, r), l.panelId = !0 === r ? null : r.panelId, o = t._creatingCover = qw(t, l), t._covers
					.push(o)
			}
			if (o) {
				var u = bb[xb(t._brushType, r)];
				o.__brushOption.range = u.getCreatingRange(gb(t, o, t._track)), n && (Kw(t, o), u.updateCommon(t, o)), $w(t, o), a = {
					isEnd: n
				}
			}
		} else n && "single" === s.brushMode && s.removeOnClick && eb(t, e, i) && nb(t) && (a = {
			isEnd: n,
			removeOnClick: !0
		});
		return a
	}

	function xb(t, e) {
		return "auto" === t ? e.defaultBrushType : t
	}
	jw.prototype = {
		constructor: jw,
		enableBrush: function(t) {
			return this._brushType && function(t) {
				var i = t._zr;
				(function(t, e, i) {
					var n = ly(t);
					n[e] === i && (n[e] = null)
				})(i, Hw, t._uid), Ew(t._handlers, function(t, e) {
					i.off(e, t)
				}), t._brushType = t._brushOption = null
			}(this), t.brushType && function(t, e) {
				var i = t._zr;
				t._enableGlobalPan || function(t, e, i) {
					ly(t)[e] = i
				}(i, Hw, t._uid);
				Ew(t._handlers, function(t, e) {
					i.on(e, t)
				}), t._brushType = e.brushType, t._brushOption = m(D(Xw), e, !0)
			}(this, t), this
		},
		setPanels: function(t) {
			if (t && t.length) {
				var e = this._panels = {};
				E(t, function(t) {
					e[t.panelId] = D(t)
				})
			} else this._panels = null;
			return this
		},
		mount: function(t) {
			t = t || {}, this._enableGlobalPan = t.enableGlobalPan;
			var e = this.group;
			return this._zr.add(e), e.attr({
				position: t.position || [0, 0],
				rotation: t.rotation || 0,
				scale: t.scale || [1, 1]
			}), this._transform = e.getLocalTransform(), this
		},
		eachCover: function(t, e) {
			Ew(this._covers, t, e)
		},
		updateCovers: function(a) {
			a = N(a, function(t) {
				return m(D(Xw), t, !0)
			});
			var i = "\0-brush-index-",
				o = this._covers,
				r = this._covers = [],
				s = this,
				l = this._creatingCover;
			return new df(o, a, function(t, e) {
				return n(t.__brushOption, e)
			}, n).add(t).update(t).remove(function(t) {
				o[t] !== l && s.group.remove(o[t])
			}).execute(), this;

			function n(t, e) {
				return (null != t.id ? t.id : i + e) + "-" + t.brushType
			}

			function t(t, e) {
				var i = a[t];
				if (null != e && o[e] === l) r[t] = o[e];
				else {
					var n = r[t] = null != e ? (o[e].__brushOption = i, o[e]) : Kw(s, qw(s, i));
					Qw(s, n)
				}
			}
		},
		unmount: function() {
			return this.enableBrush(!1), nb(this), this._zr.remove(this.group), this
		},
		dispose: function() {
			this.unmount(), this.off()
		}
	}, b(jw, Ct);
	var _b = {
		mousedown: function(t) {
			if (this._dragging) wb(this, t);
			else if (!t.target || !t.target.draggable) {
				mb(t);
				var e = this.group.transformCoordToLocal(t.offsetX, t.offsetY);
				this._creatingCover = null, (this._creatingPanel = eb(this, t, e)) && (this._dragging = !0, this._track = [e.slice()])
			}
		},
		mousemove: function(t) {
			var e = this._lastMouseMovePoint;
			e.x = t.offsetX, e.y = t.offsetY;
			var i = this.group.transformCoordToLocal(e.x, e.y);
			if (function(t, e, i) {
					if (t._brushType) {
						var n = t._zr,
							a = t._covers,
							o = eb(t, e, i);
						if (!t._dragging)
							for (var r = 0; r < a.length; r++) {
								var s = a[r].__brushOption;
								if (o && (!0 === o || s.panelId === o.panelId) && bb[s.brushType].contain(a[r], i[0], i[1])) return
							}
						o && n.setCursorStyle("crosshair")
					}
				}(this, t, i), this._dragging) {
				mb(t);
				var n = yb(this, t, i, !1);
				n && ab(this, n)
			}
		},
		mouseup: function(t) {
			wb(this, t)
		},
		globalout: function(t) {
			wb(this, t, !0)
		}
	};

	function wb(t, e, i) {
		if (t._dragging) {
			i || mb(e);
			var n = e.offsetX,
				a = e.offsetY,
				o = t._lastMouseMovePoint;
			i && (n = o.x, a = o.y);
			var r = t.group.transformCoordToLocal(n, a),
				s = yb(t, e, r, !0);
			t._dragging = !1, t._track = [], t._creatingCover = null, s && ab(t, s)
		}
	}
	var bb = {
		lineX: Sb(0),
		lineY: Sb(1),
		rect: {
			createCover: function(t, e) {
				return rb(Ow(db, function(t) {
					return t
				}, function(t) {
					return t
				}), t, e, ["w", "e", "n", "s", "se", "sw", "ne", "nw"])
			},
			getCreatingRange: function(t) {
				var e = ob(t);
				return cb(e[1][0], e[1][1], e[0][0], e[0][1])
			},
			updateCoverShape: function(t, e, i, n) {
				sb(t, e, i, n)
			},
			updateCommon: lb,
			contain: vb
		},
		polygon: {
			createCover: function(t, e) {
				var i = new Si;
				return i.add(new zr({
					name: "main",
					style: hb(e),
					silent: !0
				})), i
			},
			getCreatingRange: function(t) {
				return t
			},
			endCreating: function(t, e) {
				e.remove(e.childAt(0)), e.add(new Rr({
					name: "main",
					draggable: !0,
					drift: Ow(fb, t, e),
					ondragend: Ow(ab, t, {
						isEnd: !0
					})
				}))
			},
			updateCoverShape: function(t, e, i, n) {
				e.childAt(0).setShape({
					points: gb(t, e, i)
				})
			},
			updateCommon: lb,
			contain: vb
		}
	};

	function Sb(l) {
		return {
			createCover: function(t, e) {
				return rb(Ow(db, function(t) {
					var e = [t, [0, 100]];
					return l && e.reverse(), e
				}, function(t) {
					return t[l]
				}), t, e, [
					["w", "e"],
					["n", "s"]
				][l])
			},
			getCreatingRange: function(t) {
				var e = ob(t);
				return [zw(e[0][l], e[1][l]), Bw(e[0][l], e[1][l])]
			},
			updateCoverShape: function(t, e, i, n) {
				var a, o = ib(t, e);
				if (!0 !== o && o.getLinearBrushOtherExtent) a = o.getLinearBrushOtherExtent(l, t._transform);
				else {
					var r = t._zr;
					a = [0, [r.getWidth(), r.getHeight()][1 - l]]
				}
				var s = [i, a];
				l && s.reverse(), sb(t, e, s, n)
			},
			updateCommon: lb,
			contain: vb
		}
	}

	function Mb(i) {
		return i = Tb(i),
			function(t, e) {
				return tl(t, i)
			}
	}

	function Ib(a, o) {
		return a = Tb(a),
			function(t) {
				var e = null != o ? o : t,
					i = e ? a.width : a.height,
					n = e ? a.x : a.y;
				return [n, n + (i || 0)]
			}
	}

	function Ab(n, a, o) {
		return n = Tb(n),
			function(t, e, i) {
				return n.contain(e[0], e[1]) && !wy(t, a, o)
			}
	}

	function Tb(t) {
		return bi.create(t)
	}
	var Db = ["axisLine", "axisTickLabel", "axisName"],
		Cb = lf({
			type: "parallelAxis",
			init: function(t, e) {
				Cb.superApply(this, "init", arguments), (this._brushController = new jw(e.getZr())).on("brush", T(this._onBrush,
					this))
			},
			render: function(t, e, i, n) {
				if (! function(t, e, i) {
						return i && "axisAreaSelect" === i.type && e.findComponents({
							mainType: "parallelAxis",
							query: i
						})[0] === t
					}(t, e, n)) {
					this.axisModel = t, this.api = i, this.group.removeAll();
					var a = this._axisGroup;
					if (this._axisGroup = new Si, this.group.add(this._axisGroup), t.get("show")) {
						var o = function(t, e) {
								return e.getComponent("parallel", t.get("parallelIndex"))
							}(t, e),
							r = o.coordinateSystem,
							s = t.getAreaSelectStyle(),
							l = s.width,
							u = t.axis.dim,
							h = L({
								strokeContainThreshold: l
							}, r.getAxisLayout(u)),
							c = new Cm(t, h);
						E(Db, c.add, c), this._axisGroup.add(c.getGroup()), this._refreshBrushController(h, s, t, o, l, i);
						var d = n && !1 === n.animation ? null : t;
						Qs(a, this._axisGroup, d)
					}
				}
			},
			_refreshBrushController: function(t, e, i, n, a, o) {
				var r = i.axis.getExtent(),
					s = r[1] - r[0],
					l = Math.min(30, .1 * Math.abs(s)),
					u = bi.create({
						x: r[0],
						y: -a / 2,
						width: s,
						height: a
					});
				u.x -= l, u.width += 2 * l, this._brushController.mount({
					enableGlobalPan: !0,
					rotation: t.rotation,
					position: t.position
				}).setPanels([{
					panelId: "pl",
					clipPath: Mb(u),
					isTargetByCursor: Ab(u, o, n),
					getLinearBrushOtherExtent: Ib(u, 0)
				}]).enableBrush({
					brushType: "lineX",
					brushStyle: e,
					removeOnClick: !0
				}).updateCovers(function(t) {
					var e = t.axis;
					return N(t.activeIntervals, function(t) {
						return {
							brushType: "lineX",
							panelId: "pl",
							range: [e.dataToCoord(t[0], !0), e.dataToCoord(t[1], !0)]
						}
					})
				}(i))
			},
			_onBrush: function(t, e) {
				var i = this.axisModel,
					n = i.axis,
					a = N(t, function(t) {
						return [n.coordToData(t.range[0], !0), n.coordToData(t.range[1], !0)]
					});
				!i.option.realtime !== e.isEnd && !e.removeOnClick || this.api.dispatchAction({
					type: "axisAreaSelect",
					parallelAxisId: i.id,
					intervals: a
				})
			},
			dispose: function() {
				this._brushController.dispose()
			}
		});
	lf({
		type: "parallel",
		render: function(t, e, i) {
			this._model = t, this._api = i, this._handlers || (this._handlers = {}, E(Lb, function(t, e) {
				i.getZr().on(e, this._handlers[e] = T(t, this))
			}, this)), dc(this, "_throttledDispatchExpand", t.get("axisExpandRate"), "fixRate")
		},
		dispose: function(t, i) {
			E(this._handlers, function(t, e) {
				i.getZr().off(e, t)
			}), this._handlers = null
		},
		_throttledDispatchExpand: function(t) {
			this._dispatchExpand(t)
		},
		_dispatchExpand: function(t) {
			t && this._api.dispatchAction(L({
				type: "parallelAxisExpand"
			}, t))
		}
	});
	var Lb = {
		mousedown: function(t) {
			kb(this, "click") && (this._mouseDownPoint = [t.offsetX, t.offsetY])
		},
		mouseup: function(t) {
			var e = this._mouseDownPoint;
			if (kb(this, "click") && e) {
				var i = [t.offsetX, t.offsetY];
				if (5 < Math.pow(e[0] - i[0], 2) + Math.pow(e[1] - i[1], 2)) return;
				var n = this._model.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX, t.offsetY]);
				"none" !== n.behavior && this._dispatchExpand({
					axisExpandWindow: n.axisExpandWindow
				})
			}
			this._mouseDownPoint = null
		},
		mousemove: function(t) {
			if (!this._mouseDownPoint && kb(this, "mousemove")) {
				var e = this._model,
					i = e.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX, t.offsetY]),
					n = i.behavior;
				"jump" === n && this._throttledDispatchExpand.debounceNextCall(e.get("axisExpandDebounce")), this._throttledDispatchExpand(
					"none" === n ? null : {
						axisExpandWindow: i.axisExpandWindow,
						animation: "jump" === n && null
					})
			}
		}
	};

	function kb(t, e) {
		var i = t._model;
		return i.get("axisExpandable") && i.get("axisExpandTriggerOn") === e
	}
	Jd(function(t) {
		! function(t) {
			if (t.parallel) return;
			var e = !1;
			E(t.series, function(t) {
				t && "parallel" === t.type && (e = !0)
			}), e && (t.parallel = [{}])
		}(t),
		function(n) {
			E(wa(n.parallelAxis), function(t) {
				if (z(t)) {
					var e = t.parallelIndex || 0,
						i = wa(n.parallel)[e];
					i && i.parallelAxisDefault && m(t, i.parallelAxisDefault, !1)
				}
			})
		}(t)
	}), Wh.extend({
		type: "series.parallel",
		dependencies: ["parallel"],
		visualColorAccessPath: "lineStyle.color",
		getInitialData: function(t, e) {
			var i = this.getSource();
			return function(t, e) {
				if (t.encodeDefine) return;
				var i = e.ecModel.getComponent("parallel", e.get("parallelIndex"));
				if (!i) return;
				var n = t.encodeDefine = Q();
				E(i.dimensions, function(t) {
					var e = function(t) {
						return +t.replace("dim", "")
					}(t);
					n.set(t, e)
				})
			}(i, this), Xf(i, this)
		},
		getRawIndicesByActiveState: function(i) {
			var t = this.coordinateSystem,
				n = this.getData(),
				a = [];
			return t.eachActiveState(n, function(t, e) {
				i === t && a.push(n.getRawIndex(e))
			}), a
		},
		defaultOption: {
			zlevel: 0,
			z: 2,
			coordinateSystem: "parallel",
			parallelIndex: 0,
			label: {
				show: !1
			},
			inactiveOpacity: .05,
			activeOpacity: 1,
			lineStyle: {
				width: 1,
				opacity: .45,
				type: "solid"
			},
			emphasis: {
				label: {
					show: !1
				}
			},
			progressive: 500,
			smooth: !1,
			animationEasing: "linear"
		}
	});
	ec.extend({
		type: "parallel",
		init: function() {
			this._dataGroup = new Si, this.group.add(this._dataGroup), this._data, this._initialized
		},
		render: function(o, t, e, r) {
			var i = this._dataGroup,
				s = o.getData(),
				l = this._data,
				u = o.coordinateSystem,
				h = u.dimensions,
				c = Ob(o);
			if (s.diff(l).add(function(t) {
					Eb(Nb(s, i, t, h, u), s, t, c)
				}).update(function(t, e) {
					var i = l.getItemGraphicEl(e),
						n = Pb(s, t, h, u);
					s.setItemGraphicEl(t, i);
					var a = r && !1 === r.animation ? null : o;
					js(i, {
						shape: {
							points: n
						}
					}, a, t), Eb(i, s, t, c)
				}).remove(function(t) {
					var e = l.getItemGraphicEl(t);
					i.remove(e)
				}).execute(), !this._initialized) {
				this._initialized = !0;
				var n = function(t, e, i) {
					var n = t.model,
						a = t.getRect(),
						o = new Hr({
							shape: {
								x: a.x,
								y: a.y,
								width: a.width,
								height: a.height
							}
						}),
						r = "horizontal" === n.get("layout") ? "width" : "height";
					return o.setShape(r, 0), qs(o, {
						shape: {
							width: a.width,
							height: a.height
						}
					}, e, i), o
				}(u, o, function() {
					setTimeout(function() {
						i.removeClipPath()
					})
				});
				i.setClipPath(n)
			}
			this._data = s
		},
		incrementalPrepareRender: function(t, e, i) {
			this._initialized = !0, this._data = null, this._dataGroup.removeAll()
		},
		incrementalRender: function(t, e, i) {
			for (var n = e.getData(), a = e.coordinateSystem, o = a.dimensions, r = Ob(e), s = t.start; s < t.end; s++) {
				var l = Nb(n, this._dataGroup, s, o, a);
				l.incremental = !0, Eb(l, n, s, r)
			}
		},
		dispose: function() {},
		remove: function() {
			this._dataGroup && this._dataGroup.removeAll(), this._data = null
		}
	});

	function Pb(t, e, i, n) {
		for (var a, o = [], r = 0; r < i.length; r++) {
			var s = i[r],
				l = t.get(t.mapDimension(s), e);
			a = l, ("category" === n.getAxis(s).type ? null == a : null == a || isNaN(a)) || o.push(n.dataToPoint(l, s))
		}
		return o
	}

	function Nb(t, e, i, n, a) {
		var o = Pb(t, i, n, a),
			r = new zr({
				shape: {
					points: o
				},
				silent: !0,
				z2: 10
			});
		return e.add(r), t.setItemGraphicEl(i, r), r
	}

	function Ob(t) {
		var e = t.get("smooth", !0);
		return !0 === e && (e = .3), {
			lineStyle: t.getModel("lineStyle").getLineStyle(),
			smooth: null != e ? e : .3
		}
	}

	function Eb(t, e, i, n) {
		var a = n.lineStyle;
		e.hasItemOption && (a = e.getItemModel(i).getModel("lineStyle").getLineStyle());
		t.useStyle(a);
		var o = t.style;
		o.fill = null, o.stroke = e.getItemVisual(i, "color"), o.opacity = e.getItemVisual(i, "opacity"), n.smooth && (t.shape
			.smooth = n.smooth)
	}
	var Rb = ["lineStyle", "normal", "opacity"];
	af({
		seriesType: "parallel",
		reset: function(t, e, i) {
			var n = t.getModel("itemStyle"),
				a = t.getModel("lineStyle"),
				o = e.get("color"),
				r = a.get("color") || n.get("color") || o[t.seriesIndex % o.length],
				s = t.get("inactiveOpacity"),
				l = t.get("activeOpacity"),
				u = t.getModel("lineStyle").getLineStyle(),
				h = t.coordinateSystem,
				c = t.getData(),
				d = {
					normal: u.opacity,
					active: l,
					inactive: s
				};
			return c.setVisual("color", r), {
				progress: function(t, a) {
					h.eachActiveState(a, function(t, e) {
						var i = d[t];
						if ("normal" === t && a.hasItemOption) {
							var n = a.getItemModel(e).get(Rb, !0);
							null != n && (i = n)
						}
						a.setItemVisual(e, "opacity", i)
					}, t.start, t.end)
				}
			}
		}
	});
	var zb = Wh.extend({
			type: "series.sankey",
			layoutInfo: null,
			levelModels: null,
			getInitialData: function(t, e) {
				for (var i = t.edges || t.links, n = t.data || t.nodes, a = t.levels, o = this.levelModels = {}, r = 0; r < a.length; r++)
					null != a[r].depth && 0 <= a[r].depth && (o[a[r].depth] = new dl(a[r], this, e));
				if (n && i) return I_(n, i, this, !0, function(t, e) {
					t.wrapMethod("getItemModel", function(t, n) {
						return t.customizeGetParent(function(t) {
							var e = this.parentModel,
								i = e.getData().getItemLayout(n).depth;
							return e.levelModels[i] || this.parentModel
						}), t
					}), e.wrapMethod("getItemModel", function(t, n) {
						return t.customizeGetParent(function(t) {
							var e = this.parentModel,
								i = e.getGraph().getEdgeByIndex(n).node1.getLayout().depth;
							return e.levelModels[i] || this.parentModel
						}), t
					})
				}).data
			},
			setNodePosition: function(t, e) {
				var i = this.option.data[t];
				i.localX = e[0], i.localY = e[1]
			},
			getGraph: function() {
				return this.getData().graph
			},
			getEdgeData: function() {
				return this.getGraph().edgeData
			},
			formatTooltip: function(t, e, i) {
				if ("edge" === i) {
					var n = this.getDataParams(t, i),
						a = n.data,
						o = a.source + " -- " + a.target;
					return n.value && (o += " : " + n.value), Wl(o)
				}
				if ("node" !== i) return zb.superCall(this, "formatTooltip", t, e);
				var r = this.getGraph().getNodeByIndex(t).getLayout().value,
					s = this.getDataParams(t, i).data.name;
				if (r) o = s + " : " + r;
				return Wl(o)
			},
			optionUpdated: function() {
				var t = this.option;
				!0 === t.focusNodeAdjacency && (t.focusNodeAdjacency = "allEdges")
			},
			defaultOption: {
				zlevel: 0,
				z: 2,
				coordinateSystem: "view",
				layout: null,
				left: "5%",
				top: "5%",
				right: "20%",
				bottom: "5%",
				orient: "horizontal",
				nodeWidth: 20,
				nodeGap: 8,
				draggable: !0,
				focusNodeAdjacency: !1,
				layoutIterations: 32,
				label: {
					show: !0,
					position: "right",
					color: "#000",
					fontSize: 12
				},
				levels: [],
				nodeAlign: "justify",
				itemStyle: {
					borderWidth: 1,
					borderColor: "#333"
				},
				lineStyle: {
					color: "#314656",
					opacity: .2,
					curveness: .5
				},
				emphasis: {
					label: {
						show: !0
					},
					lineStyle: {
						opacity: .6
					}
				},
				animationEasing: "linear",
				animationDuration: 1e3
			}
		}),
		Bb = ["itemStyle", "opacity"],
		Vb = ["lineStyle", "opacity"];

	function Gb(t, e) {
		return t.getVisual("opacity") || t.getModel().get(e)
	}

	function Fb(t, e, i) {
		var n = t.getGraphicEl(),
			a = Gb(t, e);
		null != i && (null == a && (a = 1), a *= i), n.downplay && n.downplay(), n.traverse(function(t) {
			"group" !== t.type && t.setStyle("opacity", a)
		})
	}

	function Wb(t, e) {
		var i = Gb(t, e),
			n = t.getGraphicEl();
		n.highlight && n.highlight(), n.traverse(function(t) {
			"group" !== t.type && t.setStyle("opacity", i)
		})
	}
	var Hb = ds({
		shape: {
			x1: 0,
			y1: 0,
			x2: 0,
			y2: 0,
			cpx1: 0,
			cpy1: 0,
			cpx2: 0,
			cpy2: 0,
			extent: 0,
			orient: ""
		},
		buildPath: function(t, e) {
			var i = e.extent;
			t.moveTo(e.x1, e.y1), t.bezierCurveTo(e.cpx1, e.cpy1, e.cpx2, e.cpy2, e.x2, e.y2), "vertical" === e.orient ? (t.lineTo(
				e.x2 + i, e.y2), t.bezierCurveTo(e.cpx2 + i, e.cpy2, e.cpx1 + i, e.cpy1, e.x1 + i, e.y1)) : (t.lineTo(e.x2, e.y2 +
				i), t.bezierCurveTo(e.cpx2, e.cpy2 + i, e.cpx1, e.cpy1 + i, e.x1, e.y1 + i)), t.closePath()
		}
	});
	hf({
		type: "sankey",
		_model: null,
		_focusAdjacencyDisabled: !1,
		render: function(w, t, n) {
			var a = this,
				e = w.getGraph(),
				b = this.group,
				i = w.layoutInfo,
				S = i.width,
				M = i.height,
				u = w.getData(),
				I = w.getData("edge"),
				A = w.get("orient");
			this._model = w, b.removeAll(), b.attr("position", [i.x, i.y]), e.eachEdge(function(t) {
				var e = new Hb;
				e.dataIndex = t.dataIndex, e.seriesIndex = w.seriesIndex, e.dataType = "edge";
				var i, n, a, o, r, s, l, u, h = t.getModel("lineStyle"),
					c = h.get("curveness"),
					d = t.node1.getLayout(),
					f = t.node1.getModel(),
					p = f.get("localX"),
					g = f.get("localY"),
					m = t.node2.getLayout(),
					v = t.node2.getModel(),
					y = v.get("localX"),
					x = v.get("localY"),
					_ = t.getLayout();
				switch (e.shape.extent = Math.max(1, _.dy), u = "vertical" === (e.shape.orient = A) ? (i = (null != p ? p * S :
					d.x) + _.sy, n = (null != g ? g * M : d.y) + d.dy, a = (null != y ? y * S : m.x) + _.ty, r = i, s = n * (1 -
					c) + (o = null != x ? x * M : m.y) * c, l = a, n * c + o * (1 - c)) : (i = (null != p ? p * S : d.x) + d.dx,
					n = (null != g ? g * M : d.y) + _.sy, r = i * (1 - c) + (a = null != y ? y * S : m.x) * c, s = n, l = i * c +
					a * (1 - c), o = (null != x ? x * M : m.y) + _.ty), e.setShape({
					x1: i,
					y1: n,
					x2: a,
					y2: o,
					cpx1: r,
					cpy1: s,
					cpx2: l,
					cpy2: u
				}), e.setStyle(h.getItemStyle()), e.style.fill) {
					case "source":
						e.style.fill = t.node1.getVisual("color");
						break;
					case "target":
						e.style.fill = t.node2.getVisual("color")
				}
				Os(e, t.getModel("emphasis.lineStyle").getItemStyle()), b.add(e), I.setItemGraphicEl(t.dataIndex, e)
			}), e.eachNode(function(t) {
				var e = t.getLayout(),
					i = t.getModel(),
					n = i.get("localX"),
					a = i.get("localY"),
					o = i.getModel("label"),
					r = i.getModel("emphasis.label"),
					s = new Hr({
						shape: {
							x: null != n ? n * S : e.x,
							y: null != a ? a * M : e.y,
							width: e.dx,
							height: e.dy
						},
						style: i.getModel("itemStyle").getItemStyle()
					}),
					l = t.getModel("emphasis.itemStyle").getItemStyle();
				Bs(s.style, l, o, r, {
						labelFetcher: w,
						labelDataIndex: t.dataIndex,
						defaultText: t.id,
						isRectText: !0
					}), s.setStyle("fill", t.getVisual("color")), Os(s, l), b.add(s), u.setItemGraphicEl(t.dataIndex, s), s.dataType =
					"node"
			}), u.eachItemGraphicEl(function(t, i) {
				var e = u.getItemModel(i);
				e.get("draggable") && (t.drift = function(t, e) {
					a._focusAdjacencyDisabled = !0, this.shape.x += t, this.shape.y += e, this.dirty(), n.dispatchAction({
						type: "dragNode",
						seriesId: w.id,
						dataIndex: u.getRawIndex(i),
						localX: this.shape.x / S,
						localY: this.shape.y / M
					})
				}, t.ondragend = function() {
					a._focusAdjacencyDisabled = !1
				}, t.draggable = !0, t.cursor = "move"), e.get("focusNodeAdjacency") && (t.off("mouseover").on("mouseover",
					function() {
						a._focusAdjacencyDisabled || n.dispatchAction({
							type: "focusNodeAdjacency",
							seriesId: w.id,
							dataIndex: t.dataIndex
						})
					}), t.off("mouseout").on("mouseout", function() {
					a._focusAdjacencyDisabled || n.dispatchAction({
						type: "unfocusNodeAdjacency",
						seriesId: w.id
					})
				}))
			}), I.eachItemGraphicEl(function(t, e) {
				I.getItemModel(e).get("focusNodeAdjacency") && (t.off("mouseover").on("mouseover", function() {
					a._focusAdjacencyDisabled || n.dispatchAction({
						type: "focusNodeAdjacency",
						seriesId: w.id,
						edgeDataIndex: t.dataIndex
					})
				}), t.off("mouseout").on("mouseout", function() {
					a._focusAdjacencyDisabled || n.dispatchAction({
						type: "unfocusNodeAdjacency",
						seriesId: w.id
					})
				}))
			}), !this._data && w.get("animation") && b.setClipPath(function(t, e, i) {
				var n = new Hr({
					shape: {
						x: t.x - 10,
						y: t.y - 10,
						width: 0,
						height: t.height + 20
					}
				});
				return qs(n, {
					shape: {
						width: t.width + 20,
						height: t.height + 20
					}
				}, e, i), n
			}(b.getBoundingRect(), w, function() {
				b.removeClipPath()
			})), this._data = w.getData()
		},
		dispose: function() {},
		focusNodeAdjacency: function(t, e, i, n) {
			var a = this._model.getData(),
				o = a.graph,
				r = n.dataIndex,
				s = a.getItemModel(r),
				l = n.edgeDataIndex;
			if (null != r || null != l) {
				var u = o.getNodeByIndex(r),
					h = o.getEdgeByIndex(l);
				if (o.eachNode(function(t) {
						Fb(t, Bb, .1)
					}), o.eachEdge(function(t) {
						Fb(t, Vb, .1)
					}), u) {
					Wb(u, Bb);
					var c = s.get("focusNodeAdjacency");
					"outEdges" === c ? E(u.outEdges, function(t) {
						t.dataIndex < 0 || (Wb(t, Vb), Wb(t.node2, Bb))
					}) : "inEdges" === c ? E(u.inEdges, function(t) {
						t.dataIndex < 0 || (Wb(t, Vb), Wb(t.node1, Bb))
					}) : "allEdges" === c && E(u.edges, function(t) {
						t.dataIndex < 0 || (Wb(t, Vb), Wb(t.node1, Bb), Wb(t.node2, Bb))
					})
				}
				h && (Wb(h, Vb), Wb(h.node1, Bb), Wb(h.node2, Bb))
			}
		},
		unfocusNodeAdjacency: function(t, e, i, n) {
			var a = this._model.getGraph();
			a.eachNode(function(t) {
				Fb(t, Bb)
			}), a.eachEdge(function(t) {
				Fb(t, Vb)
			})
		}
	}), tf({
		type: "dragNode",
		event: "dragnode",
		update: "update"
	}, function(e, t) {
		t.eachComponent({
			mainType: "series",
			subType: "sankey",
			query: e
		}, function(t) {
			t.setNodePosition(e.dataIndex, [e.localX, e.localY])
		})
	});

	function Zb(t) {
		var e = t.hostGraph.data.getRawDataItem(t.dataIndex);
		return null != e.depth && 0 <= e.depth
	}

	function Ub(t, l, u, h, c) {
		var d = "vertical" === c ? "x" : "y";
		E(t, function(t) {
			var e, i, n;
			t.sort(function(t, e) {
				return t.getLayout()[d] - e.getLayout()[d]
			});
			for (var a = 0, o = t.length, r = "vertical" === c ? "dx" : "dy", s = 0; s < o; s++) 0 < (n = a - (i = t[s]).getLayout()[
				d]) && (e = i.getLayout()[d] + n, "vertical" === c ? i.setLayout({
				x: e
			}, !0) : i.setLayout({
				y: e
			}, !0)), a = i.getLayout()[d] + i.getLayout()[r] + l;
			if (0 < (n = a - l - ("vertical" === c ? h : u)))
				for (e = i.getLayout()[d] - n, "vertical" === c ? i.setLayout({
						x: e
					}, !0) : i.setLayout({
						y: e
					}, !0), a = e, s = o - 2; 0 <= s; --s) 0 < (n = (i = t[s]).getLayout()[d] + i.getLayout()[r] + l - a) && (e = i
					.getLayout()[d] - n, "vertical" === c ? i.setLayout({
						x: e
					}, !0) : i.setLayout({
						y: e
					}, !0)), a = i.getLayout()[d]
		})
	}

	function Xb(t, a, o) {
		E(t.slice().reverse(), function(t) {
			E(t, function(t) {
				if (t.outEdges.length) {
					var e = $b(t.outEdges, Yb, o) / $b(t.outEdges, Kb, o);
					if ("vertical" === o) {
						var i = t.getLayout().x + (e - qb(t, o)) * a;
						t.setLayout({
							x: i
						}, !0)
					} else {
						var n = t.getLayout().y + (e - qb(t, o)) * a;
						t.setLayout({
							y: n
						}, !0)
					}
				}
			})
		})
	}

	function Yb(t, e) {
		return qb(t.node2, e) * t.getValue()
	}

	function jb(t, e) {
		return qb(t.node1, e) * t.getValue()
	}

	function qb(t, e) {
		return "vertical" === e ? t.getLayout().x + t.getLayout().dx / 2 : t.getLayout().y + t.getLayout().dy / 2
	}

	function Kb(t) {
		return t.getValue()
	}

	function $b(t, e, i) {
		for (var n = 0, a = t.length, o = -1; ++o < a;) {
			var r = +e.call(t, t[o], i);
			isNaN(r) || (n += r)
		}
		return n
	}

	function Jb(t, a, o) {
		E(t, function(t) {
			E(t, function(t) {
				if (t.inEdges.length) {
					var e = $b(t.inEdges, jb, o) / $b(t.inEdges, Kb, o);
					if ("vertical" === o) {
						var i = t.getLayout().x + (e - qb(t, o)) * a;
						t.setLayout({
							x: i
						}, !0)
					} else {
						var n = t.getLayout().y + (e - qb(t, o)) * a;
						t.setLayout({
							y: n
						}, !0)
					}
				}
			})
		})
	}
	nf(function(t, u, e) {
		t.eachSeriesByType("sankey", function(t) {
			var e = t.get("nodeWidth"),
				i = t.get("nodeGap"),
				n = function(t, e) {
					return au(t.getBoxLayoutParams(), {
						width: e.getWidth(),
						height: e.getHeight()
					})
				}(t, u),
				a = (t.layoutInfo = n).width,
				o = n.height,
				r = t.getGraph(),
				s = r.nodes,
				l = r.edges;
			! function(t) {
				E(t, function(t) {
					var e = $b(t.outEdges, Kb),
						i = $b(t.inEdges, Kb),
						n = Math.max(e, i);
					t.setLayout({
						value: n
					}, !0)
				})
			}(s),
			function(t, e, i, n, a, o, r, s, l) {
				(function(t, e, i, n, a, o, r) {
					for (var s = [], l = [], u = [], h = [], c = 0, d = 0; d < e.length; d++) s[d] = 1;
					for (d = 0; d < t.length; d++) l[d] = t[d].inEdges.length, 0 === l[d] && u.push(t[d]);
					var f = -1;
					for (; u.length;) {
						for (var p = 0; p < u.length; p++) {
							var g = u[p],
								m = g.hostGraph.data.getRawDataItem(g.dataIndex),
								v = null != m.depth && 0 <= m.depth;
							v && m.depth > f && (f = m.depth), g.setLayout({
								depth: v ? m.depth : c
							}, !0), "vertical" === o ? g.setLayout({
								dy: i
							}, !0) : g.setLayout({
								dx: i
							}, !0);
							for (var y = 0; y < g.outEdges.length; y++) {
								var x = g.outEdges[y],
									_ = e.indexOf(x);
								s[_] = 0;
								var w = x.node2,
									b = t.indexOf(w);
								0 == --l[b] && h.indexOf(w) < 0 && h.push(w)
							}
						}++c, u = h, h = []
					}
					for (d = 0; d < s.length; d++)
						if (1 === s[d]) throw new Error("Sankey is a DAG, the original data has cycle!");
					var S = c - 1 < f ? f : c - 1;
					r && "left" !== r && function(t, e, i, n) {
						if ("right" === e) {
							for (var a = [], o = t, r = 0; o.length;) {
								for (var s = 0; s < o.length; s++) {
									var l = o[s];
									l.setLayout({
										skNodeHeight: r
									}, !0);
									for (var u = 0; u < l.inEdges.length; u++) {
										var h = l.inEdges[u];
										a.indexOf(h.node1) < 0 && a.push(h.node1)
									}
								}
								o = a, a = [], ++r
							}
							E(t, function(t) {
								Zb(t) || t.setLayout({
									depth: Math.max(0, n - t.getLayout().skNodeHeight)
								}, !0)
							})
						} else "justify" === e && function(t, e) {
							E(t, function(t) {
								Zb(t) || t.outEdges.length || t.setLayout({
									depth: e
								}, !0)
							})
						}(t, n)
					}(t, r, 0, S);
					! function(t, i, n) {
						E(t, function(t) {
							var e = t.getLayout().depth * i;
							"vertical" === n ? t.setLayout({
								y: e
							}, !0) : t.setLayout({
								x: e
							}, !0)
						})
					}(t, "vertical" === o ? (a - i) / S : (n - i) / S, o)
				})(t, e, i, a, o, s, l),
				function(t, e, i, n, a, o, r) {
					var s = function(t, e) {
						var i = [],
							n = "vertical" === e ? "y" : "x",
							a = Ra(t, function(t) {
								return t.getLayout()[n]
							});
						return a.keys.sort(function(t, e) {
							return t - e
						}), E(a.keys, function(t) {
							i.push(a.buckets.get(t))
						}), i
					}(t, r);
					(function(t, e, a, o, r, s) {
						var l = 1 / 0;
						E(t, function(t) {
							var e = t.length,
								i = 0;
							E(t, function(t) {
								i += t.getLayout().value
							});
							var n = "vertical" === s ? (o - (e - 1) * r) / i : (a - (e - 1) * r) / i;
							n < l && (l = n)
						}), E(t, function(t) {
							E(t, function(t, e) {
								var i = t.getLayout().value * l;
								"vertical" === s ? (t.setLayout({
									x: e
								}, !0), t.setLayout({
									dx: i
								}, !0)) : (t.setLayout({
									y: e
								}, !0), t.setLayout({
									dy: i
								}, !0))
							})
						}), E(e, function(t) {
							var e = +t.getValue() * l;
							t.setLayout({
								dy: e
							}, !0)
						})
					})(s, e, i, n, a, r), Ub(s, a, i, n, r);
					for (var l = 1; 0 < o; o--) Xb(s, l *= .99, r), Ub(s, a, i, n, r), Jb(s, l, r), Ub(s, a, i, n, r)
				}(t, e, o, a, n, r, s),
				function(t, e) {
					var i = "vertical" === e ? "x" : "y";
					E(t, function(t) {
						t.outEdges.sort(function(t, e) {
							return t.node2.getLayout()[i] - e.node2.getLayout()[i]
						}), t.inEdges.sort(function(t, e) {
							return t.node1.getLayout()[i] - e.node1.getLayout()[i]
						})
					}), E(t, function(t) {
						var e = 0,
							i = 0;
						E(t.outEdges, function(t) {
							t.setLayout({
								sy: e
							}, !0), e += t.getLayout().dy
						}), E(t.inEdges, function(t) {
							t.setLayout({
								ty: i
							}, !0), i += t.getLayout().dy
						})
					})
				}(t, s)
			}(s, l, e, i, a, o, 0 !== M(s, function(t) {
				return 0 === t.getLayout().value
			}).length ? 0 : t.get("layoutIterations"), t.get("orient"), t.get("nodeAlign"))
		})
	}), af(function(t, e) {
		t.eachSeriesByType("sankey", function(n) {
			var t = n.getGraph().nodes;
			if (t.length) {
				var a = 1 / 0,
					o = -1 / 0;
				E(t, function(t) {
					var e = t.getLayout().value;
					e < a && (a = e), o < e && (o = e)
				}), E(t, function(t) {
					var e = new Bx({
							type: "color",
							mappingMethod: "linear",
							dataExtent: [a, o],
							visual: n.get("color")
						}).mapValueToVisual(t.getLayout().value),
						i = t.getModel().get("itemStyle.color");
					null != i ? t.setVisual("color", i) : t.setVisual("color", e)
				})
			}
		})
	});
	var Qb = {
		_baseAxisDim: null,
		getInitialData: function(t, e) {
			var i, n, a = e.getComponent("xAxis", this.get("xAxisIndex")),
				o = e.getComponent("yAxis", this.get("yAxisIndex")),
				r = a.get("type"),
				s = o.get("type");
			"category" === r ? (t.layout = "horizontal", i = a.getOrdinalMeta(), n = !0) : "category" === s ? (t.layout =
				"vertical", i = o.getOrdinalMeta(), n = !0) : t.layout = t.layout || "horizontal";
			var l = ["x", "y"],
				u = "horizontal" === t.layout ? 0 : 1,
				h = this._baseAxisDim = l[u],
				c = l[1 - u],
				d = [a, o],
				f = d[u].get("type"),
				p = d[1 - u].get("type"),
				g = t.data;
			if (g && n) {
				var m = [];
				E(g, function(t, e) {
					var i;
					t.value && k(t.value) ? (i = t.value.slice(), t.value.unshift(e)) : k(t) ? (i = t.slice(), t.unshift(e)) : i =
						t, m.push(i)
				}), t.data = m
			}
			var v = this.defaultValueDimensions;
			return yv(this, {
				coordDimensions: [{
					name: h,
					type: mf(f),
					ordinalMeta: i,
					otherDims: {
						tooltip: !1,
						itemName: 0
					},
					dimsDef: ["base"]
				}, {
					name: c,
					type: mf(p),
					dimsDef: v.slice()
				}],
				dimensionsCount: v.length + 1
			})
		},
		getBaseAxis: function() {
			var t = this._baseAxisDim;
			return this.ecModel.getComponent(t + "Axis", this.get(t + "AxisIndex")).axis
		}
	};
	b(Wh.extend({
		type: "series.boxplot",
		dependencies: ["xAxis", "yAxis", "grid"],
		defaultValueDimensions: [{
			name: "min",
			defaultTooltip: !0
		}, {
			name: "Q1",
			defaultTooltip: !0
		}, {
			name: "median",
			defaultTooltip: !0
		}, {
			name: "Q3",
			defaultTooltip: !0
		}, {
			name: "max",
			defaultTooltip: !0
		}],
		dimensions: null,
		defaultOption: {
			zlevel: 0,
			z: 2,
			coordinateSystem: "cartesian2d",
			legendHoverLink: !0,
			hoverAnimation: !0,
			layout: null,
			boxWidth: [7, 50],
			itemStyle: {
				color: "#fff",
				borderWidth: 1
			},
			emphasis: {
				itemStyle: {
					borderWidth: 2,
					shadowBlur: 5,
					shadowOffsetX: 2,
					shadowOffsetY: 2,
					shadowColor: "rgba(0,0,0,0.4)"
				}
			},
			animationEasing: "elasticOut",
			animationDuration: 800
		}
	}), Qb, !0);
	var tS = ["itemStyle"],
		eS = ["emphasis", "itemStyle"],
		iS = (ec.extend({
			type: "boxplot",
			render: function(t, e, i) {
				var a = t.getData(),
					o = this.group,
					r = this._data;
				this._data || o.removeAll();
				var s = "horizontal" === t.get("layout") ? 1 : 0;
				a.diff(r).add(function(t) {
					if (a.hasValue(t)) {
						var e = nS(a.getItemLayout(t), a, t, s, !0);
						a.setItemGraphicEl(t, e), o.add(e)
					}
				}).update(function(t, e) {
					var i = r.getItemGraphicEl(e);
					if (a.hasValue(t)) {
						var n = a.getItemLayout(t);
						i ? aS(n, i, a, t) : i = nS(n, a, t, s), o.add(i), a.setItemGraphicEl(t, i)
					} else o.remove(i)
				}).remove(function(t) {
					var e = r.getItemGraphicEl(t);
					e && o.remove(e)
				}).execute(), this._data = a
			},
			remove: function(t) {
				var e = this.group,
					i = this._data;
				this._data = null, i && i.eachItemGraphicEl(function(t) {
					t && e.remove(t)
				})
			},
			dispose: et
		}), hr.extend({
			type: "boxplotBoxPath",
			shape: {},
			buildPath: function(t, e) {
				var i = e.points,
					n = 0;
				for (t.moveTo(i[n][0], i[n][1]), n++; n < 4; n++) t.lineTo(i[n][0], i[n][1]);
				for (t.closePath(); n < i.length; n++) t.moveTo(i[n][0], i[n][1]), n++, t.lineTo(i[n][0], i[n][1])
			}
		}));

	function nS(t, e, i, n, a) {
		var o = t.ends,
			r = new iS({
				shape: {
					points: a ? function(t, e, i) {
						return N(t, function(t) {
							return (t = t.slice())[e] = i.initBaseline, t
						})
					}(o, n, t) : o
				}
			});
		return aS(t, r, e, i, a), r
	}

	function aS(t, e, i, n, a) {
		var o = i.hostModel;
		(0, ol[a ? "initProps" : "updateProps"])(e, {
			shape: {
				points: t.ends
			}
		}, o, n);
		var r = i.getItemModel(n),
			s = r.getModel(tS),
			l = i.getItemVisual(n, "color"),
			u = s.getItemStyle(["borderColor"]);
		u.stroke = l, u.strokeNoScale = !0, e.useStyle(u), e.z2 = 100, Os(e, r.getModel(eS).getItemStyle())
	}
	var oS = ["itemStyle", "borderColor"],
		rS = E;
	af(function(n, t) {
		var a = n.get("color");
		n.eachRawSeriesByType("boxplot", function(t) {
			var e = a[t.seriesIndex % a.length],
				i = t.getData();
			i.setVisual({
				legendSymbol: "roundRect",
				color: t.get(oS) || e
			}), n.isSeriesFiltered(t) || i.each(function(t) {
				var e = i.getItemModel(t);
				i.setItemVisual(t, {
					color: e.get(oS, !0)
				})
			})
		})
	}), nf(function(t) {
		var e = function(t) {
			var n = [],
				a = [];
			return t.eachSeriesByType("boxplot", function(t) {
				var e = t.getBaseAxis(),
					i = _(a, e);
				i < 0 && (i = a.length, a[i] = e, n[i] = {
					axis: e,
					seriesModels: []
				}), n[i].seriesModels.push(t)
			}), n
		}(t);
		rS(e, function(i) {
			var t = i.seriesModels;
			t.length && (function(t) {
				var e, i, n = t.axis,
					a = t.seriesModels,
					o = a.length,
					r = t.boxWidthList = [],
					s = t.boxOffsetList = [],
					l = [];
				if ("category" === n.type) i = n.getBandWidth();
				else {
					var u = 0;
					rS(a, function(t) {
						u = Math.max(u, t.getData().count())
					}), e = n.getExtent(), Math.abs(e[1] - e[0])
				}
				rS(a, function(t) {
					var e = t.get("boxWidth");
					k(e) || (e = [e, e]), l.push([xl(e[0], i) || 0, xl(e[1], i) || 0])
				});
				var h = .8 * i - 2,
					c = h / o * .3,
					d = (h - c * (o - 1)) / o,
					f = d / 2 - h / 2;
				rS(a, function(t, e) {
					s.push(f), f += c + d, r.push(Math.min(Math.max(d, l[e][0]), l[e][1]))
				})
			}(i), rS(t, function(t, e) {
				! function(t, r, e) {
					var s = t.coordinateSystem,
						l = t.getData(),
						o = e / 2,
						u = "horizontal" === t.get("layout") ? 0 : 1,
						h = 1 - u,
						i = ["x", "y"],
						n = l.mapDimension(i[u]),
						a = l.mapDimension(i[h], !0);
					if (null == n || a.length < 5) return;
					for (var c = 0; c < l.count(); c++) {
						var d = l.get(n, c),
							f = x(d, a[2], c),
							p = x(d, a[0], c),
							g = x(d, a[1], c),
							m = x(d, a[3], c),
							v = x(d, a[4], c),
							y = [];
						_(y, g, 0), _(y, m, 1), y.push(p, g, v, m), w(y, p), w(y, v), w(y, f), l.setItemLayout(c, {
							initBaseline: f[h],
							ends: y
						})
					}

					function x(t, e, i) {
						var n, a = l.get(e, i),
							o = [];
						return o[u] = t, o[h] = a, isNaN(t) || isNaN(a) ? n = [NaN, NaN] : (n = s.dataToPoint(o))[u] += r, n
					}

					function _(t, e, i) {
						var n = e.slice(),
							a = e.slice();
						n[u] += o, a[u] -= o, i ? t.push(n, a) : t.push(a, n)
					}

					function w(t, e) {
						var i = e.slice(),
							n = e.slice();
						i[u] -= o, n[u] += o, t.push(i, n)
					}
				}(t, i.boxOffsetList[e], i.boxWidthList[e])
			}))
		})
	}), b(Wh.extend({
		type: "series.candlestick",
		dependencies: ["xAxis", "yAxis", "grid"],
		defaultValueDimensions: [{
			name: "open",
			defaultTooltip: !0
		}, {
			name: "close",
			defaultTooltip: !0
		}, {
			name: "lowest",
			defaultTooltip: !0
		}, {
			name: "highest",
			defaultTooltip: !0
		}],
		dimensions: null,
		defaultOption: {
			zlevel: 0,
			z: 2,
			coordinateSystem: "cartesian2d",
			legendHoverLink: !0,
			hoverAnimation: !0,
			layout: null,
			clip: !0,
			itemStyle: {
				color: "#c23531",
				color0: "#314656",
				borderWidth: 1,
				borderColor: "#c23531",
				borderColor0: "#314656"
			},
			emphasis: {
				itemStyle: {
					borderWidth: 2
				}
			},
			barMaxWidth: null,
			barMinWidth: null,
			barWidth: null,
			large: !0,
			largeThreshold: 600,
			progressive: 3e3,
			progressiveThreshold: 1e4,
			progressiveChunkMode: "mod",
			animationUpdate: !1,
			animationEasing: "linear",
			animationDuration: 300
		},
		getShadowDim: function() {
			return "open"
		},
		brushSelector: function(t, e, i) {
			var n = e.getItemLayout(t);
			return n && i.rect(n.brushRect)
		}
	}), Qb, !0);
	var sS = ["itemStyle"],
		lS = ["emphasis", "itemStyle"],
		uS = ["color", "color0", "borderColor", "borderColor0"],
		hS = (ec.extend({
			type: "candlestick",
			render: function(t, e, i) {
				this.group.removeClipPath(), this._updateDrawMode(t), this._isLargeDraw ? this._renderLarge(t) : this._renderNormal(
					t)
			},
			incrementalPrepareRender: function(t, e, i) {
				this._clear(), this._updateDrawMode(t)
			},
			incrementalRender: function(t, e, i, n) {
				this._isLargeDraw ? this._incrementalRenderLarge(t, e) : this._incrementalRenderNormal(t, e)
			},
			_updateDrawMode: function(t) {
				var e = t.pipelineContext.large;
				(null == this._isLargeDraw || e ^ this._isLargeDraw) && (this._isLargeDraw = e, this._clear())
			},
			_renderNormal: function(a) {
				var o = a.getData(),
					r = this._data,
					s = this.group,
					l = o.getLayout("isSimpleBox"),
					u = a.get("clip", !0),
					t = a.coordinateSystem,
					h = t.getArea && t.getArea();
				this._data || s.removeAll(), o.diff(r).add(function(t) {
					if (o.hasValue(t)) {
						var e, i = o.getItemLayout(t);
						if (u && dS(h, i)) return;
						qs(e = cS(i, t, !0), {
							shape: {
								points: i.ends
							}
						}, a, t), fS(e, o, t, l), s.add(e), o.setItemGraphicEl(t, e)
					}
				}).update(function(t, e) {
					var i = r.getItemGraphicEl(e);
					if (o.hasValue(t)) {
						var n = o.getItemLayout(t);
						u && dS(h, n) ? s.remove(i) : (i ? js(i, {
							shape: {
								points: n.ends
							}
						}, a, t) : i = cS(n, t), fS(i, o, t, l), s.add(i), o.setItemGraphicEl(t, i))
					} else s.remove(i)
				}).remove(function(t) {
					var e = r.getItemGraphicEl(t);
					e && s.remove(e)
				}).execute(), this._data = o
			},
			_renderLarge: function(t) {
				this._clear(), gS(t, this.group);
				var e = t.get("clip", !0) ? tm(t.coordinateSystem, !1, t) : null;
				e ? this.group.setClipPath(e) : this.group.removeClipPath()
			},
			_incrementalRenderNormal: function(t, e) {
				for (var i, n = e.getData(), a = n.getLayout("isSimpleBox"); null != (i = t.next());) {
					var o;
					fS(o = cS(n.getItemLayout(i), i), n, i, a), o.incremental = !0, this.group.add(o)
				}
			},
			_incrementalRenderLarge: function(t, e) {
				gS(e, this.group, !0)
			},
			remove: function(t) {
				this._clear()
			},
			_clear: function() {
				this.group.removeAll(), this._data = null
			},
			dispose: et
		}), hr.extend({
			type: "normalCandlestickBox",
			shape: {},
			buildPath: function(t, e) {
				var i = e.points;
				this.__simpleBox ? (t.moveTo(i[4][0], i[4][1]), t.lineTo(i[6][0], i[6][1])) : (t.moveTo(i[0][0], i[0][1]), t.lineTo(
					i[1][0], i[1][1]), t.lineTo(i[2][0], i[2][1]), t.lineTo(i[3][0], i[3][1]), t.closePath(), t.moveTo(i[4][0],
					i[4][1]), t.lineTo(i[5][0], i[5][1]), t.moveTo(i[6][0], i[6][1]), t.lineTo(i[7][0], i[7][1]))
			}
		}));

	function cS(t, e, i) {
		var n = t.ends;
		return new hS({
			shape: {
				points: i ? function(t, e) {
					return N(t, function(t) {
						return (t = t.slice())[1] = e.initBaseline, t
					})
				}(n, t) : n
			},
			z2: 100
		})
	}

	function dS(t, e) {
		for (var i = !0, n = 0; n < e.ends.length; n++)
			if (t.contain(e.ends[n][0], e.ends[n][1])) {
				i = !1;
				break
			}
		return i
	}

	function fS(t, e, i, n) {
		var a = e.getItemModel(i),
			o = a.getModel(sS),
			r = e.getItemVisual(i, "color"),
			s = e.getItemVisual(i, "borderColor") || r,
			l = o.getItemStyle(uS);
		t.useStyle(l), t.style.strokeNoScale = !0, t.style.fill = r, t.style.stroke = s, t.__simpleBox = n, Os(t, a.getModel(
			lS).getItemStyle())
	}
	var pS = hr.extend({
		type: "largeCandlestickBox",
		shape: {},
		buildPath: function(t, e) {
			for (var i = e.points, n = 0; n < i.length;)
				if (this.__sign === i[n++]) {
					var a = i[n++];
					t.moveTo(a, i[n++]), t.lineTo(a, i[n++])
				} else n += 3
		}
	});

	function gS(t, e, i) {
		var n = t.getData(),
			a = n.getLayout("largePoints"),
			o = new pS({
				shape: {
					points: a
				},
				__sign: 1
			});
		e.add(o);
		var r = new pS({
			shape: {
				points: a
			},
			__sign: -1
		});
		e.add(r), mS(1, o, t, n), mS(-1, r, t, n), i && (o.incremental = !0, r.incremental = !0)
	}

	function mS(t, e, i, n) {
		var a = 0 < t ? "P" : "N",
			o = n.getVisual("borderColor" + a) || n.getVisual("color" + a),
			r = i.getModel(sS).getItemStyle(uS);
		e.useStyle(r), e.style.fill = null, e.style.stroke = o
	}
	var vS = ["itemStyle", "borderColor"],
		yS = ["itemStyle", "borderColor0"],
		xS = ["itemStyle", "color"],
		_S = ["itemStyle", "color0"],
		wS = {
			seriesType: "candlestick",
			plan: Jh(),
			performRawSeries: !0,
			reset: function(t, e) {
				var i = t.getData(),
					n = t.pipelineContext.large;
				if (i.setVisual({
						legendSymbol: "roundRect",
						colorP: o(1, t),
						colorN: o(-1, t),
						borderColorP: r(1, t),
						borderColorN: r(-1, t)
					}), !e.isSeriesFiltered(t)) return !n && {
					progress: function(t, e) {
						var i;
						for (; null != (i = t.next());) {
							var n = e.getItemModel(i),
								a = e.getItemLayout(i).sign;
							e.setItemVisual(i, {
								color: o(a, n),
								borderColor: r(a, n)
							})
						}
					}
				};

				function o(t, e) {
					return e.get(0 < t ? xS : _S)
				}

				function r(t, e) {
					return e.get(0 < t ? vS : yS)
				}
			}
		},
		bS = "undefined" != typeof Float32Array ? Float32Array : Array,
		SS = {
			seriesType: "candlestick",
			plan: Jh(),
			reset: function(t) {
				var x = t.coordinateSystem,
					e = t.getData(),
					_ = function(t, e) {
						var i, n = t.getBaseAxis(),
							a = "category" === n.type ? n.getBandWidth() : (i = n.getExtent(), Math.abs(i[1] - i[0]) / e.count()),
							o = xl(H(t.get("barMaxWidth"), a), a),
							r = xl(H(t.get("barMinWidth"), 1), a),
							s = t.get("barWidth");
						return null != s ? xl(s, a) : Math.max(Math.min(a / 2, o), r)
					}(t, e),
					i = ["x", "y"],
					w = e.mapDimension(i[0]),
					n = e.mapDimension(i[1], !0),
					b = n[0],
					S = n[1],
					M = n[2],
					I = n[3];
				if (e.setLayout({
						candleWidth: _,
						isSimpleBox: _ <= 1.3
					}), !(null == w || n.length < 4)) return {
					progress: t.pipelineContext.large ? function(t, e) {
						var i, n, a = new bS(4 * t.count),
							o = 0,
							r = [],
							s = [];
						for (; null != (n = t.next());) {
							var l = e.get(w, n),
								u = e.get(b, n),
								h = e.get(S, n),
								c = e.get(M, n),
								d = e.get(I, n);
							isNaN(l) || isNaN(c) || isNaN(d) ? (a[o++] = NaN, o += 3) : (a[o++] = MS(e, n, u, h, S), r[0] = l, r[1] = c,
								i = x.dataToPoint(r, null, s), a[o++] = i ? i[0] : NaN, a[o++] = i ? i[1] : NaN, r[1] = d, i = x.dataToPoint(
									r, null, s), a[o++] = i ? i[1] : NaN)
						}
						e.setLayout("largePoints", a)
					} : function(t, e) {
						var i;
						for (; null != (i = t.next());) {
							var n = e.get(w, i),
								a = e.get(b, i),
								o = e.get(S, i),
								r = e.get(M, i),
								s = e.get(I, i),
								l = Math.min(a, o),
								u = Math.max(a, o),
								h = g(l, n),
								c = g(u, n),
								d = g(r, n),
								f = g(s, n),
								p = [];
							m(p, c, 0), m(p, h, 1), p.push(y(f), y(c), y(d), y(h)), e.setItemLayout(i, {
								sign: MS(e, i, a, o, S),
								initBaseline: o < a ? c[1] : h[1],
								ends: p,
								brushRect: v(r, s, n)
							})
						}

						function g(t, e) {
							var i = [];
							return i[0] = e, i[1] = t, isNaN(e) || isNaN(t) ? [NaN, NaN] : x.dataToPoint(i)
						}

						function m(t, e, i) {
							var n = e.slice(),
								a = e.slice();
							n[0] = _s(n[0] + _ / 2, 1, !1), a[0] = _s(a[0] - _ / 2, 1, !0), i ? t.push(n, a) : t.push(a, n)
						}

						function v(t, e, i) {
							var n = g(t, i),
								a = g(e, i);
							return n[0] -= _ / 2, a[0] -= _ / 2, {
								x: n[0],
								y: n[1],
								width: _,
								height: a[1] - n[1]
							}
						}

						function y(t) {
							return t[0] = _s(t[0], 1), t
						}
					}
				}
			}
		};

	function MS(t, e, i, n, a) {
		return n < i ? -1 : i < n ? 1 : 0 < e ? t.get(a, e - 1) <= n ? 1 : -1 : 1
	}
	Jd(function(t) {
		t && k(t.series) && E(t.series, function(t) {
			z(t) && "k" === t.type && (t.type = "candlestick")
		})
	}), af(wS), nf(SS), Wh.extend({
		type: "series.effectScatter",
		dependencies: ["grid", "polar"],
		getInitialData: function(t, e) {
			return Xf(this.getSource(), this)
		},
		brushSelector: "point",
		defaultOption: {
			coordinateSystem: "cartesian2d",
			zlevel: 0,
			z: 2,
			legendHoverLink: !0,
			effectType: "ripple",
			progressive: 0,
			showEffectOn: "render",
			rippleEffect: {
				period: 4,
				scale: 2.5,
				brushType: "fill"
			},
			symbolSize: 10
		}
	});

	function IS(t, e) {
		var i = e.rippleEffectColor || e.color;
		t.eachChild(function(t) {
			t.attr({
				z: e.z,
				zlevel: e.zlevel,
				style: {
					stroke: "stroke" === e.brushType ? i : null,
					fill: "fill" === e.brushType ? i : null
				}
			})
		})
	}

	function AS(t, e) {
		Si.call(this);
		var i = new Sg(t, e),
			n = new Si;
		this.add(i), this.add(n), n.beforeUpdate = function() {
			this.attr(i.getScale())
		}, this.updateData(t, e)
	}
	var TS = AS.prototype;
	TS.stopEffectAnimation = function() {
		this.childAt(1).removeAll()
	}, TS.startEffectAnimation = function(t) {
		for (var e = t.symbolType, i = t.color, n = this.childAt(1), a = 0; a < 3; a++) {
			var o = Jp(e, -1, -1, 2, 2, i);
			o.attr({
				style: {
					strokeNoScale: !0
				},
				z2: 99,
				silent: !0,
				scale: [.5, .5]
			});
			var r = -a / 3 * t.period + t.effectOffset;
			o.animate("", !0).when(t.period, {
				scale: [t.rippleScale / 2, t.rippleScale / 2]
			}).delay(r).start(), o.animateStyle(!0).when(t.period, {
				opacity: 0
			}).delay(r).start(), n.add(o)
		}
		IS(n, t)
	}, TS.updateEffectAnimation = function(t) {
		for (var e = this._effectCfg, i = this.childAt(1), n = ["symbolType", "period", "rippleScale"], a = 0; a < n.length; a++) {
			var o = n[a];
			if (e[o] !== t[o]) return this.stopEffectAnimation(), void this.startEffectAnimation(t)
		}
		IS(i, t)
	}, TS.highlight = function() {
		this.trigger("emphasis")
	}, TS.downplay = function() {
		this.trigger("normal")
	}, TS.updateData = function(t, e) {
		var i = t.hostModel;
		this.childAt(0).updateData(t, e);
		var n = this.childAt(1),
			a = t.getItemModel(e),
			o = t.getItemVisual(e, "symbol"),
			r = function(t) {
				return k(t) || (t = [+t, +t]), t
			}(t.getItemVisual(e, "symbolSize")),
			s = t.getItemVisual(e, "color");
		n.attr("scale", r), n.traverse(function(t) {
			t.attr({
				fill: s
			})
		});
		var l = a.getShallow("symbolOffset");
		if (l) {
			var u = n.position;
			u[0] = xl(l[0], r[0]), u[1] = xl(l[1], r[1])
		}
		n.rotation = (a.getShallow("symbolRotate") || 0) * Math.PI / 180 || 0;
		var h = {};
		if (h.showEffectOn = i.get("showEffectOn"), h.rippleScale = a.get("rippleEffect.scale"), h.brushType = a.get(
				"rippleEffect.brushType"), h.period = 1e3 * a.get("rippleEffect.period"), h.effectOffset = e / t.count(), h.z = a
			.getShallow("z") || 0, h.zlevel = a.getShallow("zlevel") || 0, h.symbolType = o, h.color = s, h.rippleEffectColor =
			a.get("rippleEffect.color"), this.off("mouseover").off("mouseout").off("emphasis").off("normal"), "render" === h.showEffectOn
		) this._effectCfg ? this.updateEffectAnimation(h) : this.startEffectAnimation(h), this._effectCfg = h;
		else {
			this._effectCfg = null, this.stopEffectAnimation();
			var c = this.childAt(0),
				d = function() {
					c.highlight(), "render" !== h.showEffectOn && this.startEffectAnimation(h)
				},
				f = function() {
					c.downplay(), "render" !== h.showEffectOn && this.stopEffectAnimation()
				};
			this.on("mouseover", d, this).on("mouseout", f, this).on("emphasis", d, this).on("normal", f, this)
		}
		this._effectCfg = h
	}, TS.fadeOut = function(t) {
		this.off("mouseover").off("mouseout").off("emphasis").off("normal"), t && t()
	}, w(AS, Si), hf({
		type: "effectScatter",
		init: function() {
			this._symbolDraw = new Ng(AS)
		},
		render: function(t, e, i) {
			var n = t.getData(),
				a = this._symbolDraw;
			a.updateData(n), this.group.add(a.group)
		},
		updateTransform: function(t, e, i) {
			var n = t.getData();
			this.group.dirty();
			var a = sm().reset(t);
			a.progress && a.progress({
				start: 0,
				end: n.count()
			}, n), this._symbolDraw.updateLayout(n)
		},
		_updateGroupTransform: function(t) {
			var e = t.coordinateSystem;
			e && e.getRoamTransform && (this.group.transform = se(e.getRoamTransform()), this.group.decomposeTransform())
		},
		remove: function(t, e) {
			this._symbolDraw && this._symbolDraw.remove(e)
		},
		dispose: function() {}
	}), af(rm("effectScatter", "circle")), nf(sm("effectScatter"));
	var DS = "undefined" == typeof Uint32Array ? Array : Uint32Array,
		CS = "undefined" == typeof Float64Array ? Array : Float64Array;

	function LS(t) {
		var e = t.data;
		e && e[0] && e[0][0] && e[0][0].coord && (t.data = N(e, function(t) {
			var e = {
				coords: [t[0].coord, t[1].coord]
			};
			return t[0].name && (e.fromName = t[0].name), t[1].name && (e.toName = t[1].name), p([e, t[0], t[1]])
		}))
	}
	var kS = Wh.extend({
		type: "series.lines",
		dependencies: ["grid", "polar"],
		visualColorAccessPath: "lineStyle.color",
		init: function(t) {
			t.data = t.data || [], LS(t);
			var e = this._processFlatCoordsArray(t.data);
			this._flatCoords = e.flatCoords, this._flatCoordsOffset = e.flatCoordsOffset, e.flatCoords && (t.data = new Float32Array(
				e.count)), kS.superApply(this, "init", arguments)
		},
		mergeOption: function(t) {
			if (t.data = t.data || [], LS(t), t.data) {
				var e = this._processFlatCoordsArray(t.data);
				this._flatCoords = e.flatCoords, this._flatCoordsOffset = e.flatCoordsOffset, e.flatCoords && (t.data = new Float32Array(
					e.count))
			}
			kS.superApply(this, "mergeOption", arguments)
		},
		appendData: function(t) {
			var e = this._processFlatCoordsArray(t.data);
			e.flatCoords && (this._flatCoords ? (this._flatCoords = tt(this._flatCoords, e.flatCoords), this._flatCoordsOffset =
				tt(this._flatCoordsOffset, e.flatCoordsOffset)) : (this._flatCoords = e.flatCoords, this._flatCoordsOffset =
				e.flatCoordsOffset), t.data = new Float32Array(e.count)), this.getRawData().appendData(t.data)
		},
		_getCoordsFromItemModel: function(t) {
			var e = this.getData().getItemModel(t);
			return e.option instanceof Array ? e.option : e.getShallow("coords")
		},
		getLineCoordsCount: function(t) {
			return this._flatCoordsOffset ? this._flatCoordsOffset[2 * t + 1] : this._getCoordsFromItemModel(t).length
		},
		getLineCoords: function(t, e) {
			if (this._flatCoordsOffset) {
				for (var i = this._flatCoordsOffset[2 * t], n = this._flatCoordsOffset[2 * t + 1], a = 0; a < n; a++) e[a] = e[
					a] || [], e[a][0] = this._flatCoords[i + 2 * a], e[a][1] = this._flatCoords[i + 2 * a + 1];
				return n
			}
			var o = this._getCoordsFromItemModel(t);
			for (a = 0; a < o.length; a++) e[a] = e[a] || [], e[a][0] = o[a][0], e[a][1] = o[a][1];
			return o.length
		},
		_processFlatCoordsArray: function(t) {
			var e = 0;
			if (this._flatCoords && (e = this._flatCoords.length), "number" != typeof t[0]) return {
				flatCoordsOffset: null,
				flatCoords: null,
				count: t.length
			};
			for (var i = t.length, n = new DS(i), a = new CS(i), o = 0, r = 0, s = 0, l = 0; l < i;) {
				s++;
				var u = t[l++];
				n[r++] = o + e, n[r++] = u;
				for (var h = 0; h < u; h++) {
					var c = t[l++],
						d = t[l++];
					a[o++] = c, a[o++] = d
				}
			}
			return {
				flatCoordsOffset: new Uint32Array(n.buffer, 0, r),
				flatCoords: a,
				count: s
			}
		},
		getInitialData: function(t, e) {
			var o = new Tf(["value"], this);
			return o.hasItemOption = !1, o.initData(t.data, [], function(t, e, i, n) {
				if (t instanceof Array) return NaN;
				o.hasItemOption = !0;
				var a = t.value;
				return null != a ? a instanceof Array ? a[n] : a : void 0
			}), o
		},
		formatTooltip: function(t) {
			var e = this.getData().getItemModel(t),
				i = e.get("name");
			if (i) return i;
			var n = e.get("fromName"),
				a = e.get("toName"),
				o = [];
			return null != n && o.push(n), null != a && o.push(a), Wl(o.join(" > "))
		},
		preventIncremental: function() {
			return !!this.get("effect.show")
		},
		getProgressive: function() {
			var t = this.option.progressive;
			return null == t ? this.option.large ? 1e4 : this.get("progressive") : t
		},
		getProgressiveThreshold: function() {
			var t = this.option.progressiveThreshold;
			return null == t ? this.option.large ? 2e4 : this.get("progressiveThreshold") : t
		},
		defaultOption: {
			coordinateSystem: "geo",
			zlevel: 0,
			z: 2,
			legendHoverLink: !0,
			hoverAnimation: !0,
			xAxisIndex: 0,
			yAxisIndex: 0,
			symbol: ["none", "none"],
			symbolSize: [10, 10],
			geoIndex: 0,
			effect: {
				show: !1,
				period: 4,
				constantSpeed: 0,
				symbol: "circle",
				symbolSize: 3,
				loop: !0,
				trailLength: .2
			},
			large: !1,
			largeThreshold: 2e3,
			polyline: !1,
			clip: !0,
			label: {
				show: !1,
				position: "end"
			},
			lineStyle: {
				opacity: .5
			}
		}
	});

	function PS(t, e, i) {
		Si.call(this), this.add(this.createLine(t, e, i)), this._updateEffectSymbol(t, e)
	}
	var NS = PS.prototype;

	function OS(t, e, i) {
		Si.call(this), this._createPolyline(t, e, i)
	}
	NS.createLine = function(t, e, i) {
		return new E_(t, e, i)
	}, NS._updateEffectSymbol = function(t, e) {
		var i = t.getItemModel(e).getModel("effect"),
			n = i.get("symbolSize"),
			a = i.get("symbol");
		k(n) || (n = [n, n]);
		var o = i.get("color") || t.getItemVisual(e, "color"),
			r = this.childAt(1);
		this._symbolType !== a && (this.remove(r), (r = Jp(a, -.5, -.5, 1, 1, o)).z2 = 100, r.culling = !0, this.add(r)), r &&
			(r.setStyle("shadowColor", o), r.setStyle(i.getItemStyle(["color"])), r.attr("scale", n), r.setColor(o), r.attr(
				"scale", n), this._symbolType = a, this._updateEffectAnimation(t, i, e))
	}, NS._updateEffectAnimation = function(e, t, i) {
		var n = this.childAt(1);
		if (n) {
			var a = this,
				o = e.getItemLayout(i),
				r = 1e3 * t.get("period"),
				s = t.get("loop"),
				l = t.get("constantSpeed"),
				u = W(t.get("delay"), function(t) {
					return t / e.count() * r / 3
				}),
				h = "function" == typeof u;
			if (n.ignore = !0, this.updateAnimationPoints(n, o), 0 < l && (r = this.getLineLength(n) / l * 1e3), r !== this._period ||
				s !== this._loop) {
				n.stopAnimation();
				var c = u;
				h && (c = u(i)), 0 < n.__t && (c = -r * n.__t), n.__t = 0;
				var d = n.animate("", s).when(r, {
					__t: 1
				}).delay(c).during(function() {
					a.updateSymbolPosition(n)
				});
				s || d.done(function() {
					a.remove(n)
				}), d.start()
			}
			this._period = r, this._loop = s
		}
	}, NS.getLineLength = function(t) {
		return yt(t.__p1, t.__cp1) + yt(t.__cp1, t.__p2)
	}, NS.updateAnimationPoints = function(t, e) {
		t.__p1 = e[0], t.__p2 = e[1], t.__cp1 = e[2] || [(e[0][0] + e[1][0]) / 2, (e[0][1] + e[1][1]) / 2]
	}, NS.updateData = function(t, e, i) {
		this.childAt(0).updateData(t, e, i), this._updateEffectSymbol(t, e)
	}, NS.updateSymbolPosition = function(t) {
		var e = t.__p1,
			i = t.__p2,
			n = t.__cp1,
			a = t.__t,
			o = t.position,
			r = fo,
			s = po;
		o[0] = r(e[0], n[0], i[0], a), o[1] = r(e[1], n[1], i[1], a);
		var l = s(e[0], n[0], i[0], a),
			u = s(e[1], n[1], i[1], a);
		t.rotation = -Math.atan2(u, l) - Math.PI / 2, t.ignore = !1
	}, NS.updateLayout = function(t, e) {
		this.childAt(0).updateLayout(t, e);
		var i = t.getItemModel(e).getModel("effect");
		this._updateEffectAnimation(t, i, e)
	}, w(PS, Si);
	var ES = OS.prototype;

	function RS(t, e, i) {
		PS.call(this, t, e, i), this._lastFrame = 0, this._lastFramePercent = 0
	}
	ES._createPolyline = function(t, e, i) {
		var n = t.getItemLayout(e),
			a = new zr({
				shape: {
					points: n
				}
			});
		this.add(a), this._updateCommonStl(t, e, i)
	}, ES.updateData = function(t, e, i) {
		var n = t.hostModel;
		js(this.childAt(0), {
			shape: {
				points: t.getItemLayout(e)
			}
		}, n, e), this._updateCommonStl(t, e, i)
	}, ES._updateCommonStl = function(t, e, i) {
		var n = this.childAt(0),
			a = t.getItemModel(e),
			o = t.getItemVisual(e, "color"),
			r = i && i.lineStyle,
			s = i && i.hoverLineStyle;
		i && !t.hasItemOption || (r = a.getModel("lineStyle").getLineStyle(), s = a.getModel("emphasis.lineStyle").getLineStyle()),
			n.useStyle(C({
				strokeNoScale: !0,
				fill: "none",
				stroke: o
			}, r)), n.hoverStyle = s, Os(this)
	}, ES.updateLayout = function(t, e) {
		this.childAt(0).setShape("points", t.getItemLayout(e))
	}, w(OS, Si);
	var zS = RS.prototype;
	zS.createLine = function(t, e, i) {
		return new OS(t, e, i)
	}, zS.updateAnimationPoints = function(t, e) {
		this._points = e;
		for (var i = [0], n = 0, a = 1; a < e.length; a++) {
			var o = e[a - 1],
				r = e[a];
			n += yt(o, r), i.push(n)
		}
		if (0 !== n) {
			for (a = 0; a < i.length; a++) i[a] /= n;
			this._offsets = i, this._length = n
		}
	}, zS.getLineLength = function(t) {
		return this._length
	}, zS.updateSymbolPosition = function(t) {
		var e = t.__t,
			i = this._points,
			n = this._offsets,
			a = i.length;
		if (n) {
			var o = this._lastFrame;
			if (e < this._lastFramePercent) {
				for (r = Math.min(o + 1, a - 1); 0 <= r && !(n[r] <= e); r--);
				r = Math.min(r, a - 2)
			} else {
				for (var r = o; r < a && !(n[r] > e); r++);
				r = Math.min(r - 1, a - 2)
			}
			wt(t.position, i[r], i[r + 1], (e - n[r]) / (n[r + 1] - n[r]));
			var s = i[r + 1][0] - i[r][0],
				l = i[r + 1][1] - i[r][1];
			t.rotation = -Math.atan2(l, s) - Math.PI / 2, this._lastFrame = r, this._lastFramePercent = e, t.ignore = !1
		}
	}, w(RS, PS);
	var BS = ds({
		shape: {
			polyline: !1,
			curveness: 0,
			segs: []
		},
		buildPath: function(t, e) {
			var i = e.segs,
				n = e.curveness;
			if (e.polyline)
				for (var a = 0; a < i.length;) {
					var o = i[a++];
					if (0 < o) {
						t.moveTo(i[a++], i[a++]);
						for (var r = 1; r < o; r++) t.lineTo(i[a++], i[a++])
					}
				} else
					for (a = 0; a < i.length;) {
						var s = i[a++],
							l = i[a++],
							u = i[a++],
							h = i[a++];
						if (t.moveTo(s, l), 0 < n) {
							var c = (s + u) / 2 - (l - h) * n,
								d = (l + h) / 2 - (u - s) * n;
							t.quadraticCurveTo(c, d, u, h)
						} else t.lineTo(u, h)
					}
		},
		findDataIndex: function(t, e) {
			var i = this.shape,
				n = i.segs,
				a = i.curveness;
			if (i.polyline)
				for (var o = 0, r = 0; r < n.length;) {
					var s = n[r++];
					if (0 < s)
						for (var l = n[r++], u = n[r++], h = 1; h < s; h++) {
							if (Zo(l, u, c = n[r++], d = n[r++])) return o
						}
					o++
				} else
					for (o = 0, r = 0; r < n.length;) {
						l = n[r++], u = n[r++];
						var c = n[r++],
							d = n[r++];
						if (0 < a) {
							if (Xo(l, u, (l + c) / 2 - (u - d) * a, (u + d) / 2 - (c - l) * a, c, d)) return o
						} else if (Zo(l, u, c, d)) return o;
						o++
					}
			return -1
		}
	});

	function VS() {
		this.group = new Si
	}
	var GS = VS.prototype;
	GS.isPersistent = function() {
		return !this._incremental
	}, GS.updateData = function(t) {
		this.group.removeAll();
		var e = new BS({
			rectHover: !0,
			cursor: "default"
		});
		e.setShape({
			segs: t.getLayout("linesPoints")
		}), this._setCommon(e, t), this.group.add(e), this._incremental = null
	}, GS.incrementalPrepareUpdate = function(t) {
		this.group.removeAll(), this._clearIncremental(), 5e5 < t.count() ? (this._incremental || (this._incremental = new ts({
			silent: !0
		})), this.group.add(this._incremental)) : this._incremental = null
	}, GS.incrementalUpdate = function(t, e) {
		var i = new BS;
		i.setShape({
			segs: e.getLayout("linesPoints")
		}), this._setCommon(i, e, !!this._incremental), this._incremental ? this._incremental.addDisplayable(i, !0) : (i.rectHover = !
			0, i.cursor = "default", i.__startIndex = t.start, this.group.add(i))
	}, GS.remove = function() {
		this._clearIncremental(), this._incremental = null, this.group.removeAll()
	}, GS._setCommon = function(i, t, e) {
		var n = t.hostModel;
		i.setShape({
			polyline: n.get("polyline"),
			curveness: n.get("lineStyle.curveness")
		}), i.useStyle(n.getModel("lineStyle").getLineStyle()), i.style.strokeNoScale = !0;
		var a = t.getVisual("color");
		a && i.setStyle("stroke", a), i.setStyle("fill"), e || (i.seriesIndex = n.seriesIndex, i.on("mousemove", function(t) {
			i.dataIndex = null;
			var e = i.findDataIndex(t.offsetX, t.offsetY);
			0 < e && (i.dataIndex = e + i.__startIndex)
		}))
	}, GS._clearIncremental = function() {
		var t = this._incremental;
		t && t.clearDisplaybles()
	};
	var FS = {
		seriesType: "lines",
		plan: Jh(),
		reset: function(g) {
			var m = g.coordinateSystem,
				v = g.get("polyline"),
				y = g.pipelineContext.large;
			return {
				progress: function(t, e) {
					var i = [];
					if (y) {
						var n, a = t.end - t.start;
						if (v) {
							for (var o = 0, r = t.start; r < t.end; r++) o += g.getLineCoordsCount(r);
							n = new Float32Array(a + 2 * o)
						} else n = new Float32Array(4 * a);
						var s = 0,
							l = [];
						for (r = t.start; r < t.end; r++) {
							var u = g.getLineCoords(r, i);
							v && (n[s++] = u);
							for (var h = 0; h < u; h++) l = m.dataToPoint(i[h], !1, l), n[s++] = l[0], n[s++] = l[1]
						}
						e.setLayout("linesPoints", n)
					} else
						for (r = t.start; r < t.end; r++) {
							var c = e.getItemModel(r),
								d = (u = g.getLineCoords(r, i), []);
							if (v)
								for (var f = 0; f < u; f++) d.push(m.dataToPoint(i[f]));
							else {
								d[0] = m.dataToPoint(i[0]), d[1] = m.dataToPoint(i[1]);
								var p = c.get("lineStyle.curveness"); + p && (d[2] = [(d[0][0] + d[1][0]) / 2 - (d[0][1] - d[1][1]) * p, (d[
									0][1] + d[1][1]) / 2 - (d[1][0] - d[0][0]) * p])
							}
							e.setItemLayout(r, d)
						}
				}
			}
		}
	};

	function WS(t) {
		return t instanceof Array || (t = [t, t]), t
	}
	hf({
		type: "lines",
		init: function() {},
		render: function(t, e, i) {
			var n = t.getData(),
				a = this._updateLineDraw(n, t),
				o = t.get("zlevel"),
				r = t.get("effect.trailLength"),
				s = i.getZr(),
				l = "svg" === s.painter.getType();
			l || s.painter.getLayer(o).clear(!0), null == this._lastZlevel || l || s.configLayer(this._lastZlevel, {
				motionBlur: !1
			}), this._showEffect(t) && r && (l || s.configLayer(o, {
				motionBlur: !0,
				lastFrameAlpha: Math.max(Math.min(r / 10 + .9, 1), 0)
			})), a.updateData(n);
			var u = t.get("clip", !0) && tm(t.coordinateSystem, !1, t);
			u ? this.group.setClipPath(u) : this.group.removeClipPath(), this._lastZlevel = o, this._finished = !0
		},
		incrementalPrepareRender: function(t, e, i) {
			var n = t.getData();
			this._updateLineDraw(n, t).incrementalPrepareUpdate(n), this._clearLayer(i), this._finished = !1
		},
		incrementalRender: function(t, e, i) {
			this._lineDraw.incrementalUpdate(t, e.getData()), this._finished = t.end === e.getData().count()
		},
		updateTransform: function(t, e, i) {
			var n = t.getData(),
				a = t.pipelineContext;
			if (!this._finished || a.large || a.progressiveRender) return {
				update: !0
			};
			var o = FS.reset(t);
			o.progress && o.progress({
				start: 0,
				end: n.count()
			}, n), this._lineDraw.updateLayout(), this._clearLayer(i)
		},
		_updateLineDraw: function(t, e) {
			var i = this._lineDraw,
				n = this._showEffect(e),
				a = !!e.get("polyline"),
				o = e.pipelineContext.large;
			return i && n === this._hasEffet && a === this._isPolyline && o === this._isLargeDraw || (i && i.remove(), i =
				this._lineDraw = o ? new VS : new z_(a ? n ? RS : OS : n ? PS : E_), this._hasEffet = n, this._isPolyline = a,
				this._isLargeDraw = o, this.group.removeAll()), this.group.add(i.group), i
		},
		_showEffect: function(t) {
			return !!t.get("effect.show")
		},
		_clearLayer: function(t) {
			var e = t.getZr();
			"svg" === e.painter.getType() || null == this._lastZlevel || e.painter.getLayer(this._lastZlevel).clear(!0)
		},
		remove: function(t, e) {
			this._lineDraw && this._lineDraw.remove(), this._lineDraw = null, this._clearLayer(e)
		},
		dispose: function() {}
	});
	var HS = "lineStyle.opacity".split("."),
		ZS = {
			seriesType: "lines",
			reset: function(t, e, i) {
				var n = WS(t.get("symbol")),
					a = WS(t.get("symbolSize")),
					o = t.getData();
				return o.setVisual("fromSymbol", n && n[0]), o.setVisual("toSymbol", n && n[1]), o.setVisual("fromSymbolSize", a &&
					a[0]), o.setVisual("toSymbolSize", a && a[1]), o.setVisual("opacity", t.get(HS)), {
					dataEach: o.hasItemOption ? function(t, e) {
						var i = t.getItemModel(e),
							n = WS(i.getShallow("symbol", !0)),
							a = WS(i.getShallow("symbolSize", !0)),
							o = i.get(HS);
						n[0] && t.setItemVisual(e, "fromSymbol", n[0]), n[1] && t.setItemVisual(e, "toSymbol", n[1]), a[0] && t.setItemVisual(
							e, "fromSymbolSize", a[0]), a[1] && t.setItemVisual(e, "toSymbolSize", a[1]), t.setItemVisual(e, "opacity",
							o)
					} : null
				}
			}
		};
	nf(FS), af(ZS), Wh.extend({
		type: "series.heatmap",
		getInitialData: function(t, e) {
			return Xf(this.getSource(), this, {
				generateCoord: "value"
			})
		},
		preventIncremental: function() {
			var t = Hu.get(this.get("coordinateSystem"));
			if (t && t.dimensions) return "lng" === t.dimensions[0] && "lat" === t.dimensions[1]
		},
		defaultOption: {
			coordinateSystem: "cartesian2d",
			zlevel: 0,
			z: 2,
			geoIndex: 0,
			blurSize: 30,
			pointSize: 20,
			maxOpacity: 1,
			minOpacity: 0
		}
	});

	function US() {
		var t = g();
		this.canvas = t, this.blurSize = 30, this.pointSize = 20, this.maxOpacity = 1, this.minOpacity = 0, this._gradientPixels = {}
	}
	US.prototype = {
		update: function(t, e, i, n, a, o) {
			var r = this._getBrush(),
				s = this._getGradient(t, a, "inRange"),
				l = this._getGradient(t, a, "outOfRange"),
				u = this.pointSize + this.blurSize,
				h = this.canvas,
				c = h.getContext("2d"),
				d = t.length;
			h.width = e, h.height = i;
			for (var f = 0; f < d; ++f) {
				var p = t[f],
					g = p[0],
					m = p[1],
					v = n(p[2]);
				c.globalAlpha = v, c.drawImage(r, g - u, m - u)
			}
			if (!h.width || !h.height) return h;
			for (var y = c.getImageData(0, 0, h.width, h.height), x = y.data, _ = 0, w = x.length, b = this.minOpacity, S =
					this.maxOpacity - b; _ < w;) {
				v = x[_ + 3] / 256;
				var M = 4 * Math.floor(255 * v);
				if (0 < v) {
					var I = o(v) ? s : l;
					0 < v && (v = v * S + b), x[_++] = I[M], x[_++] = I[1 + M], x[_++] = I[2 + M], x[_++] = I[3 + M] * v * 256
				} else _ += 4
			}
			return c.putImageData(y, 0, 0), h
		},
		_getBrush: function() {
			var t = this._brushCanvas || (this._brushCanvas = g()),
				e = this.pointSize + this.blurSize,
				i = 2 * e;
			t.width = i, t.height = i;
			var n = t.getContext("2d");
			return n.clearRect(0, 0, i, i), n.shadowOffsetX = i, n.shadowBlur = this.blurSize, n.shadowColor = "#000", n.beginPath(),
				n.arc(-e, e, this.pointSize, 0, 2 * Math.PI, !0), n.closePath(), n.fill(), t
		},
		_getGradient: function(t, e, i) {
			for (var n = this._gradientPixels, a = n[i] || (n[i] = new Uint8ClampedArray(1024)), o = [0, 0, 0, 0], r = 0, s =
					0; s < 256; s++) e[i](s / 255, !0, o), a[r++] = o[0], a[r++] = o[1], a[r++] = o[2], a[r++] = o[3];
			return a
		}
	}, hf({
		type: "heatmap",
		render: function(i, t, e) {
			var n;
			t.eachComponent("visualMap", function(e) {
				e.eachTargetSeries(function(t) {
					t === i && (n = e)
				})
			}), this.group.removeAll(), this._incrementalDisplayable = null;
			var a = i.coordinateSystem;
			"cartesian2d" === a.type || "calendar" === a.type ? this._renderOnCartesianAndCalendar(i, e, 0, i.getData().count()) :
				function(t) {
					var e = t.dimensions;
					return "lng" === e[0] && "lat" === e[1]
				}(a) && this._renderOnGeo(a, i, n, e)
		},
		incrementalPrepareRender: function(t, e, i) {
			this.group.removeAll()
		},
		incrementalRender: function(t, e, i, n) {
			e.coordinateSystem && this._renderOnCartesianAndCalendar(e, n, t.start, t.end, !0)
		},
		_renderOnCartesianAndCalendar: function(t, e, i, n, a) {
			var o, r, s = t.coordinateSystem;
			if ("cartesian2d" === s.type) {
				var l = s.getAxis("x"),
					u = s.getAxis("y");
				o = l.getBandWidth(), r = u.getBandWidth()
			}
			for (var h = this.group, c = t.getData(), d = "emphasis.itemStyle", f = "emphasis.label", p = t.getModel(
						"itemStyle").getItemStyle(["color"]), g = t.getModel(d).getItemStyle(), m = t.getModel("label"), v = t.getModel(
						f), y = s.type, x = "cartesian2d" === y ? [c.mapDimension("x"), c.mapDimension("y"), c.mapDimension("value")] :
					[c.mapDimension("time"), c.mapDimension("value")], _ = i; _ < n; _++) {
				var w;
				if ("cartesian2d" === y) {
					if (isNaN(c.get(x[2], _))) continue;
					var b = s.dataToPoint([c.get(x[0], _), c.get(x[1], _)]);
					w = new Hr({
						shape: {
							x: b[0] - o / 2,
							y: b[1] - r / 2,
							width: o,
							height: r
						},
						style: {
							fill: c.getItemVisual(_, "color"),
							opacity: c.getItemVisual(_, "opacity")
						}
					})
				} else {
					if (isNaN(c.get(x[1], _))) continue;
					w = new Hr({
						z2: 1,
						shape: s.dataToRect([c.get(x[0], _)]).contentShape,
						style: {
							fill: c.getItemVisual(_, "color"),
							opacity: c.getItemVisual(_, "opacity")
						}
					})
				}
				var S = c.getItemModel(_);
				c.hasItemOption && (p = S.getModel("itemStyle").getItemStyle(["color"]), g = S.getModel(d).getItemStyle(), m =
					S.getModel("label"), v = S.getModel(f));
				var M = t.getRawValue(_),
					I = "-";
				M && null != M[2] && (I = M[2]), Bs(p, g, m, v, {
					labelFetcher: t,
					labelDataIndex: _,
					defaultText: I,
					isRectText: !0
				}), w.setStyle(p), Os(w, c.hasItemOption ? g : L({}, g)), (w.incremental = a) && (w.useHoverLayer = !0), h.add(
					w), c.setItemGraphicEl(_, w)
			}
		},
		_renderOnGeo: function(a, t, e, i) {
			var n = e.targetVisuals.inRange,
				o = e.targetVisuals.outOfRange,
				r = t.getData(),
				s = this._hmLayer || this._hmLayer || new US;
			s.blurSize = t.get("blurSize"), s.pointSize = t.get("pointSize"), s.minOpacity = t.get("minOpacity"), s.maxOpacity =
				t.get("maxOpacity");
			var l = a.getViewRect().clone(),
				u = a.getRoamTransform();
			l.applyTransform(u);
			var h = Math.max(l.x, 0),
				c = Math.max(l.y, 0),
				d = Math.min(l.width + l.x, i.getWidth()),
				f = Math.min(l.height + l.y, i.getHeight()),
				p = d - h,
				g = f - c,
				m = [r.mapDimension("lng"), r.mapDimension("lat"), r.mapDimension("value")],
				v = r.mapArray(m, function(t, e, i) {
					var n = a.dataToPoint([t, e]);
					return n[0] -= h, n[1] -= c, n.push(i), n
				}),
				y = e.getExtent(),
				x = "visualMap.continuous" === e.type ? function(t, e) {
					var i = t[1] - t[0];
					return e = [(e[0] - t[0]) / i, (e[1] - t[0]) / i],
						function(t) {
							return t >= e[0] && t <= e[1]
						}
				}(y, e.option.range) : function(e, n, a) {
					var i = e[1] - e[0],
						o = (n = N(n, function(t) {
							return {
								interval: [(t.interval[0] - e[0]) / i, (t.interval[1] - e[0]) / i]
							}
						})).length,
						r = 0;
					return function(t) {
						for (var e = r; e < o; e++) {
							if ((i = n[e].interval)[0] <= t && t <= i[1]) {
								r = e;
								break
							}
						}
						if (e === o)
							for (e = r - 1; 0 <= e; e--) {
								var i;
								if ((i = n[e].interval)[0] <= t && t <= i[1]) {
									r = e;
									break
								}
							}
						return 0 <= e && e < o && a[e]
					}
				}(y, e.getPieceList(), e.option.selected);
			s.update(v, p, g, n.color.getNormalizer(), {
				inRange: n.color.getColorMapper(),
				outOfRange: o.color.getColorMapper()
			}, x);
			var _ = new Yn({
				style: {
					width: p,
					height: g,
					x: h,
					y: c,
					image: s.canvas
				},
				silent: !0
			});
			this.group.add(_)
		},
		dispose: function() {}
	});
	var XS = Qm.extend({
			type: "series.pictorialBar",
			dependencies: ["grid"],
			defaultOption: {
				symbol: "circle",
				symbolSize: null,
				symbolRotate: null,
				symbolPosition: null,
				symbolOffset: null,
				symbolMargin: null,
				symbolRepeat: !1,
				symbolRepeatDirection: "end",
				symbolClip: !1,
				symbolBoundingData: null,
				symbolPatternSize: 400,
				barGap: "-100%",
				progressive: 0,
				hoverAnimation: !1
			},
			getInitialData: function(t) {
				return t.stack = null, XS.superApply(this, "getInitialData", arguments)
			}
		}),
		YS = ["itemStyle", "borderWidth"],
		jS = [{
			xy: "x",
			wh: "width",
			index: 0,
			posDesc: ["left", "right"]
		}, {
			xy: "y",
			wh: "height",
			index: 1,
			posDesc: ["top", "bottom"]
		}],
		qS = new Lr;
	hf({
		type: "pictorialBar",
		render: function(t, e, i) {
			var r = this.group,
				s = t.getData(),
				l = this._data,
				n = t.coordinateSystem,
				a = !!n.getBaseAxis().isHorizontal(),
				o = n.grid.getRect(),
				u = {
					ecSize: {
						width: i.getWidth(),
						height: i.getHeight()
					},
					seriesModel: t,
					coordSys: n,
					coordSysExtent: [
						[o.x, o.x + o.width],
						[o.y, o.y + o.height]
					],
					isHorizontal: a,
					valueDim: jS[+a],
					categoryDim: jS[1 - a]
				};
			return s.diff(l).add(function(t) {
				if (s.hasValue(t)) {
					var e = nM(s, t),
						i = KS(s, t, e, u),
						n = sM(s, u, i);
					s.setItemGraphicEl(t, n), r.add(n), dM(n, u, i)
				}
			}).update(function(t, e) {
				var i = l.getItemGraphicEl(e);
				if (s.hasValue(t)) {
					var n = nM(s, t),
						a = KS(s, t, n, u),
						o = uM(s, a);
					i && o !== i.__pictorialShapeStr && (r.remove(i), s.setItemGraphicEl(t, null), i = null), i ? function(t, e,
						i) {
						var n = i.animationModel,
							a = i.dataIndex;
						js(t.__pictorialBundle, {
							position: i.bundlePosition.slice()
						}, n, a), i.symbolRepeat ? QS(t, e, i, !0) : tM(t, e, i, !0);
						eM(t, i, !0), iM(t, e, i, !0)
					}(i, u, a) : i = sM(s, u, a, !0), s.setItemGraphicEl(t, i), i.__pictorialSymbolMeta = a, r.add(i), dM(i, u,
						a)
				} else r.remove(i)
			}).remove(function(t) {
				var e = l.getItemGraphicEl(t);
				e && lM(l, t, e.__pictorialSymbolMeta.animationModel, e)
			}).execute(), this._data = s, this.group
		},
		dispose: et,
		remove: function(e, t) {
			var i = this.group,
				n = this._data;
			e.get("animation") ? n && n.eachItemGraphicEl(function(t) {
				lM(n, t.dataIndex, e, t)
			}) : i.removeAll()
		}
	});

	function KS(t, e, i, n) {
		var a = t.getItemLayout(e),
			o = i.get("symbolRepeat"),
			r = i.get("symbolClip"),
			s = i.get("symbolPosition") || "start",
			l = (i.get("symbolRotate") || 0) * Math.PI / 180 || 0,
			u = i.get("symbolPatternSize") || 2,
			h = i.isAnimationEnabled(),
			c = {
				dataIndex: e,
				layout: a,
				itemModel: i,
				symbolType: t.getItemVisual(e, "symbol") || "circle",
				color: t.getItemVisual(e, "color"),
				symbolClip: r,
				symbolRepeat: o,
				symbolRepeatDirection: i.get("symbolRepeatDirection"),
				symbolPatternSize: u,
				rotation: l,
				animationModel: h ? i : null,
				hoverAnimation: h && i.get("hoverAnimation"),
				z2: i.getShallow("z", !0) || 0
			};
		! function(t, e, i, n, a) {
			var o, r = n.valueDim,
				s = t.get("symbolBoundingData"),
				l = n.coordSys.getOtherAxis(n.coordSys.getBaseAxis()),
				u = l.toGlobalCoord(l.dataToCoord(0)),
				h = 1 - +(i[r.wh] <= 0);
			if (k(s)) {
				var c = [$S(l, s[0]) - u, $S(l, s[1]) - u];
				c[1] < c[0] && c.reverse(), o = c[h]
			} else o = null != s ? $S(l, s) - u : e ? n.coordSysExtent[r.index][h] - u : i[r.wh];
			a.boundingLength = o, e && (a.repeatCutLength = i[r.wh]);
			a.pxSign = 0 < o ? 1 : o < 0 ? -1 : 0
		}(i, o, a, n, c),
		function(t, e, i, n, a, o, r, s, l, u) {
			var h = l.valueDim,
				c = l.categoryDim,
				d = Math.abs(i[c.wh]),
				f = t.getItemVisual(e, "symbolSize");
			f = k(f) ? f.slice() : (null == f && (f = "100%"), [f, f]);
			f[c.index] = xl(f[c.index], d), f[h.index] = xl(f[h.index], n ? d : Math.abs(o)), u.symbolSize = f, (u.symbolScale = [
				f[0] / s, f[1] / s
			])[h.index] *= (l.isHorizontal ? -1 : 1) * r
		}(t, e, a, o, 0, c.boundingLength, c.pxSign, u, n, c),
		function(t, e, i, n, a) {
			var o = t.get(YS) || 0;
			o && (qS.attr({
				scale: e.slice(),
				rotation: i
			}), qS.updateTransform(), o /= qS.getLineScale(), o *= e[n.valueDim.index]);
			a.valueLineWidth = o
		}(i, c.symbolScale, l, n, c);
		var d = c.symbolSize,
			f = i.get("symbolOffset");
		return k(f) && (f = [xl(f[0], d[0]), xl(f[1], d[1])]),
			function(t, e, i, n, a, o, r, s, l, u, h, c) {
				var d = h.categoryDim,
					f = h.valueDim,
					p = c.pxSign,
					g = Math.max(e[f.index] + s, 0),
					m = g;
				if (n) {
					var v = Math.abs(l),
						y = W(t.get("symbolMargin"), "15%") + "",
						x = !1;
					y.lastIndexOf("!") === y.length - 1 && (x = !0, y = y.slice(0, y.length - 1)), y = xl(y, e[f.index]);
					var _ = Math.max(g + 2 * y, 0),
						w = x ? 0 : 2 * y,
						b = El(n),
						S = b ? n : fM((v + w) / _);
					_ = g + 2 * (y = (v - S * g) / 2 / (x ? S : S - 1)), w = x ? 0 : 2 * y, b || "fixed" === n || (S = u ? fM((Math.abs(
						u) + w) / _) : 0), m = S * _ - w, c.repeatTimes = S, c.symbolMargin = y
				}
				var M = p * (m / 2),
					I = c.pathPosition = [];
				I[d.index] = i[d.wh] / 2, I[f.index] = "start" === r ? M : "end" === r ? l - M : l / 2, o && (I[0] += o[0], I[1] +=
					o[1]);
				var A = c.bundlePosition = [];
				A[d.index] = i[d.xy], A[f.index] = i[f.xy];
				var T = c.barRectShape = L({}, i);
				T[f.wh] = p * Math.max(Math.abs(i[f.wh]), Math.abs(I[f.index] + M)), T[d.wh] = i[d.wh];
				var D = c.clipShape = {};
				D[d.xy] = -i[d.xy], D[d.wh] = h.ecSize[d.wh], D[f.xy] = 0, D[f.wh] = i[f.wh]
			}(i, d, a, o, 0, f, s, c.valueLineWidth, c.boundingLength, c.repeatCutLength, n, c), c
	}

	function $S(t, e) {
		return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e)))
	}

	function JS(t) {
		var e = t.symbolPatternSize,
			i = Jp(t.symbolType, -e / 2, -e / 2, e, e, t.color);
		return i.attr({
			culling: !0
		}), "image" !== i.type && i.setStyle({
			strokeNoScale: !0
		}), i
	}

	function QS(t, e, a, i) {
		var n = t.__pictorialBundle,
			o = a.symbolSize,
			r = a.valueLineWidth,
			s = a.pathPosition,
			l = e.valueDim,
			u = a.repeatTimes || 0,
			h = 0,
			c = o[e.valueDim.index] + r + 2 * a.symbolMargin;
		for (hM(t, function(t) {
				t.__pictorialAnimationIndex = h, t.__pictorialRepeatTimes = u, h < u ? cM(t, null, p(h), a, i) : cM(t, null, {
					scale: [0, 0]
				}, a, i, function() {
					n.remove(t)
				}), rM(t, a), h++
			}); h < u; h++) {
			var d = JS(a);
			d.__pictorialAnimationIndex = h, d.__pictorialRepeatTimes = u, n.add(d);
			var f = p(h);
			cM(d, {
				position: f.position,
				scale: [0, 0]
			}, {
				scale: f.scale,
				rotation: f.rotation
			}, a, i), d.on("mouseover", g).on("mouseout", m), rM(d, a)
		}

		function p(t) {
			var e = s.slice(),
				i = a.pxSign,
				n = t;
			return ("start" === a.symbolRepeatDirection ? 0 < i : i < 0) && (n = u - 1 - t), e[l.index] = c * (n - u / 2 + .5) +
				s[l.index], {
					position: e,
					scale: a.symbolScale.slice(),
					rotation: a.rotation
				}
		}

		function g() {
			hM(t, function(t) {
				t.trigger("emphasis")
			})
		}

		function m() {
			hM(t, function(t) {
				t.trigger("normal")
			})
		}
	}

	function tM(t, e, i, n) {
		var a = t.__pictorialBundle,
			o = t.__pictorialMainPath;
		o ? cM(o, null, {
			position: i.pathPosition.slice(),
			scale: i.symbolScale.slice(),
			rotation: i.rotation
		}, i, n) : (o = t.__pictorialMainPath = JS(i), a.add(o), cM(o, {
			position: i.pathPosition.slice(),
			scale: [0, 0],
			rotation: i.rotation
		}, {
			scale: i.symbolScale.slice()
		}, i, n), o.on("mouseover", function() {
			this.trigger("emphasis")
		}).on("mouseout", function() {
			this.trigger("normal")
		})), rM(o, i)
	}

	function eM(t, e, i) {
		var n = L({}, e.barRectShape),
			a = t.__pictorialBarRect;
		a ? cM(a, null, {
			shape: n
		}, e, i) : (a = t.__pictorialBarRect = new Hr({
			z2: 2,
			shape: n,
			silent: !0,
			style: {
				stroke: "transparent",
				fill: "transparent",
				lineWidth: 0
			}
		}), t.add(a))
	}

	function iM(t, e, i, n) {
		if (i.symbolClip) {
			var a = t.__pictorialClipPath,
				o = L({}, i.clipShape),
				r = e.valueDim,
				s = i.animationModel,
				l = i.dataIndex;
			if (a) js(a, {
				shape: o
			}, s, l);
			else {
				o[r.wh] = 0, a = new Hr({
					shape: o
				}), t.__pictorialBundle.setClipPath(a), t.__pictorialClipPath = a;
				var u = {};
				u[r.wh] = i.clipShape[r.wh], ol[n ? "updateProps" : "initProps"](a, {
					shape: u
				}, s, l)
			}
		}
	}

	function nM(t, e) {
		var i = t.getItemModel(e);
		return i.getAnimationDelayParams = aM, i.isAnimationEnabled = oM, i
	}

	function aM(t) {
		return {
			index: t.__pictorialAnimationIndex,
			count: t.__pictorialRepeatTimes
		}
	}

	function oM() {
		return this.parentModel.isAnimationEnabled() && !!this.getShallow("animation")
	}

	function rM(t, e) {
		t.off("emphasis").off("normal");
		var i = e.symbolScale.slice();
		e.hoverAnimation && t.on("emphasis", function() {
			this.animateTo({
				scale: [1.1 * i[0], 1.1 * i[1]]
			}, 400, "elasticOut")
		}).on("normal", function() {
			this.animateTo({
				scale: i.slice()
			}, 400, "elasticOut")
		})
	}

	function sM(t, e, i, n) {
		var a = new Si,
			o = new Si;
		return a.add(o), (a.__pictorialBundle = o).attr("position", i.bundlePosition.slice()), i.symbolRepeat ? QS(a, e, i) :
			tM(a, 0, i), eM(a, i, n), iM(a, e, i, n), a.__pictorialShapeStr = uM(t, i), a.__pictorialSymbolMeta = i, a
	}

	function lM(t, e, i, n) {
		var a = n.__pictorialBarRect;
		a && (a.style.text = null);
		var o = [];
		hM(n, function(t) {
			o.push(t)
		}), n.__pictorialMainPath && o.push(n.__pictorialMainPath), n.__pictorialClipPath && (i = null), E(o, function(t) {
			js(t, {
				scale: [0, 0]
			}, i, e, function() {
				n.parent && n.parent.remove(n)
			})
		}), t.setItemGraphicEl(e, null)
	}

	function uM(t, e) {
		return [t.getItemVisual(e.dataIndex, "symbol") || "none", !!e.symbolRepeat, !!e.symbolClip].join(":")
	}

	function hM(e, i, n) {
		E(e.__pictorialBundle.children(), function(t) {
			t !== e.__pictorialBarRect && i.call(n, t)
		})
	}

	function cM(t, e, i, n, a, o) {
		e && t.attr(e), n.symbolClip && !a ? i && t.attr(i) : i && ol[a ? "updateProps" : "initProps"](t, i, n.animationModel,
			n.dataIndex, o)
	}

	function dM(t, e, i) {
		var n = i.color,
			a = i.dataIndex,
			o = i.itemModel,
			r = o.getModel("itemStyle").getItemStyle(["color"]),
			s = o.getModel("emphasis.itemStyle").getItemStyle(),
			l = o.getShallow("cursor");
		hM(t, function(t) {
			t.setColor(n), t.setStyle(C({
				fill: n,
				opacity: i.opacity
			}, r)), Os(t, s), l && (t.cursor = l), t.z2 = i.z2
		});
		var u = {},
			h = (e.valueDim.posDesc[+(0 < i.boundingLength)], t.__pictorialBarRect);
		tv(h.style, u, o, n, e.seriesModel, a), Os(h, u)
	}

	function fM(t) {
		var e = Math.round(t);
		return Math.abs(t - e) < 1e-4 ? e : Math.ceil(t)
	}
	nf(A(pp, "pictorialBar")), af(rm("pictorialBar", "roundRect"));

	function pM(t, e, i, n, a) {
		vg.call(this, t, e, i), this.type = n || "value", this.position = a || "bottom", this.orient = null
	}

	function gM(t, e, i) {
		this.dimension = "single", this.dimensions = ["single"], this._axis = null, this._rect, this._init(t, e, i), this.model =
			t
	}

	function mM(t, e) {
		e = e || {};
		var i = t.coordinateSystem,
			n = t.axis,
			a = {},
			o = n.position,
			r = n.orient,
			s = i.getRect(),
			l = [s.x, s.x + s.width, s.y, s.y + s.height],
			u = {
				horizontal: {
					top: l[2],
					bottom: l[3]
				},
				vertical: {
					left: l[0],
					right: l[1]
				}
			};
		a.position = ["vertical" === r ? u.vertical[o] : l[0], "horizontal" === r ? u.horizontal[o] : l[3]];
		a.rotation = Math.PI / 2 * {
			horizontal: 0,
			vertical: 1
		} [r];
		a.labelDirection = a.tickDirection = a.nameDirection = {
				top: -1,
				bottom: 1,
				right: 1,
				left: -1
			} [o], t.get("axisTick.inside") && (a.tickDirection = -a.tickDirection), W(e.labelInside, t.get("axisLabel.inside")) &&
			(a.labelDirection = -a.labelDirection);
		var h = e.rotate;
		return null == h && (h = t.get("axisLabel.rotate")), a.labelRotation = "top" === o ? -h : h, a.z2 = 1, a
	}
	pM.prototype = {
		constructor: pM,
		model: null,
		isHorizontal: function() {
			var t = this.position;
			return "top" === t || "bottom" === t
		},
		pointToData: function(t, e) {
			return this.coordinateSystem.pointToData(t, e)[0]
		},
		toGlobalCoord: null,
		toLocalCoord: null
	}, w(pM, vg), Hu.register("single", {
		create: function(n, a) {
			var o = [];
			return n.eachComponent("singleAxis", function(t, e) {
				var i = new gM(t, n, a);
				i.name = "single_" + e, i.resize(t, a), t.coordinateSystem = i, o.push(i)
			}), n.eachSeries(function(t) {
				if ("singleAxis" === t.get("coordinateSystem")) {
					var e = n.queryComponents({
						mainType: "singleAxis",
						index: t.get("singleAxisIndex"),
						id: t.get("singleAxisId")
					})[0];
					t.coordinateSystem = e && e.coordinateSystem
				}
			}), o
		},
		dimensions: (gM.prototype = {
			type: "singleAxis",
			axisPointerEnabled: !0,
			constructor: gM,
			_init: function(t, e, i) {
				var n = this.dimension,
					a = new pM(n, Bp(t), [0, 0], t.get("type"), t.get("position")),
					o = "category" === a.type;
				a.onBand = o && t.get("boundaryGap"), a.inverse = t.get("inverse"), a.orient = t.get("orient"), (t.axis = a).model =
					t, (a.coordinateSystem = this)._axis = a
			},
			update: function(t, e) {
				t.eachSeries(function(t) {
					if (t.coordinateSystem === this) {
						var e = t.getData();
						E(e.mapDimension(this.dimension, !0), function(t) {
							this._axis.scale.unionExtentFromData(e, t)
						}, this), zp(this._axis.scale, this._axis.model)
					}
				}, this)
			},
			resize: function(t, e) {
				this._rect = au({
					left: t.get("left"),
					top: t.get("top"),
					right: t.get("right"),
					bottom: t.get("bottom"),
					width: t.get("width"),
					height: t.get("height")
				}, {
					width: e.getWidth(),
					height: e.getHeight()
				}), this._adjustAxis()
			},
			getRect: function() {
				return this._rect
			},
			_adjustAxis: function() {
				var t = this._rect,
					e = this._axis,
					i = e.isHorizontal(),
					n = i ? [0, t.width] : [0, t.height],
					a = e.reverse ? 1 : 0;
				e.setExtent(n[a], n[1 - a]), this._updateAxisTransform(e, i ? t.x : t.y)
			},
			_updateAxisTransform: function(t, e) {
				var i = t.getExtent(),
					n = i[0] + i[1],
					a = t.isHorizontal();
				t.toGlobalCoord = a ? function(t) {
					return t + e
				} : function(t) {
					return n - t + e
				}, t.toLocalCoord = a ? function(t) {
					return t - e
				} : function(t) {
					return n - t + e
				}
			},
			getAxis: function() {
				return this._axis
			},
			getBaseAxis: function() {
				return this._axis
			},
			getAxes: function() {
				return [this._axis]
			},
			getTooltipAxes: function() {
				return {
					baseAxes: [this.getAxis()]
				}
			},
			containPoint: function(t) {
				var e = this.getRect(),
					i = this.getAxis();
				return "horizontal" === i.orient ? i.contain(i.toLocalCoord(t[0])) && t[1] >= e.y && t[1] <= e.y + e.height :
					i.contain(i.toLocalCoord(t[1])) && t[0] >= e.y && t[0] <= e.y + e.height
			},
			pointToData: function(t) {
				var e = this.getAxis();
				return [e.coordToData(e.toLocalCoord(t["horizontal" === e.orient ? 0 : 1]))]
			},
			dataToPoint: function(t) {
				var e = this.getAxis(),
					i = this.getRect(),
					n = [],
					a = "horizontal" === e.orient ? 0 : 1;
				return t instanceof Array && (t = t[0]), n[a] = e.toGlobalCoord(e.dataToCoord(+t)), n[1 - a] = 0 == a ? i.y +
					i.height / 2 : i.x + i.width / 2, n
			}
		}).dimensions
	});
	var vM = ["axisLine", "axisTickLabel", "axisName"],
		yM = "splitLine",
		xM = Um.extend({
			type: "singleAxis",
			axisPointerClass: "SingleAxisPointer",
			render: function(t, e, i, n) {
				var a = this.group;
				a.removeAll();
				var o = mM(t),
					r = new Cm(t, o);
				E(vM, r.add, r), a.add(r.getGroup()), t.get(yM + ".show") && this["_" + yM](t), xM.superCall(this, "render", t,
					e, i, n)
			},
			_splitLine: function(t) {
				var e = t.axis;
				if (!e.scale.isBlank()) {
					var i = t.getModel("splitLine"),
						n = i.getModel("lineStyle"),
						a = n.get("width"),
						o = n.get("color");
					o = o instanceof Array ? o : [o];
					for (var r = t.coordinateSystem.getRect(), s = e.isHorizontal(), l = [], u = 0, h = e.getTicksCoords({
							tickModel: i
						}), c = [], d = [], f = 0; f < h.length; ++f) {
						var p = e.toGlobalCoord(h[f].coord);
						s ? (c[0] = p, c[1] = r.y, d[0] = p, d[1] = r.y + r.height) : (c[0] = r.x, c[1] = p, d[0] = r.x + r.width, d[1] =
							p);
						var g = u++ % o.length;
						l[g] = l[g] || [], l[g].push(new Ur({
							subPixelOptimize: !0,
							shape: {
								x1: c[0],
								y1: c[1],
								x2: d[0],
								y2: d[1]
							},
							style: {
								lineWidth: a
							},
							silent: !0
						}))
					}
					for (f = 0; f < l.length; ++f) this.group.add(ys(l[f], {
						style: {
							stroke: o[f % o.length],
							lineDash: n.getLineDash(a),
							lineWidth: a
						},
						silent: !0
					}))
				}
			}
		}),
		_M = fu.extend({
			type: "singleAxis",
			layoutMode: "box",
			axis: null,
			coordinateSystem: null,
			getCoordSysModel: function() {
				return this
			}
		});
	m(_M.prototype, Hp), mm("single", _M, function(t, e) {
		return e.type || (e.data ? "category" : "value")
	}, {
		left: "5%",
		top: "5%",
		right: "5%",
		bottom: "5%",
		type: "value",
		position: "bottom",
		orient: "horizontal",
		axisLine: {
			show: !0,
			lineStyle: {
				width: 1,
				type: "solid"
			}
		},
		tooltip: {
			show: !0
		},
		axisTick: {
			show: !0,
			length: 6,
			lineStyle: {
				width: 1
			}
		},
		axisLabel: {
			show: !0,
			interval: "auto"
		},
		splitLine: {
			show: !0,
			lineStyle: {
				type: "dashed",
				opacity: .2
			}
		}
	});

	function wM(t, e) {
		var i, n = [],
			a = t.seriesIndex;
		if (null == a || !(i = e.getSeriesByIndex(a))) return {
			point: []
		};
		var o = i.getData(),
			r = Ca(o, t);
		if (null == r || r < 0 || k(r)) return {
			point: []
		};
		var s = o.getItemGraphicEl(r),
			l = i.coordinateSystem;
		if (i.getTooltipPosition) n = i.getTooltipPosition(r) || [];
		else if (l && l.dataToPoint) n = l.dataToPoint(o.getValues(N(l.dimensions, function(t) {
			return o.mapDimension(t)
		}), r, !0)) || [];
		else if (s) {
			var u = s.getBoundingRect().clone();
			u.applyTransform(s.transform), n = [u.x + u.width / 2, u.y + u.height / 2]
		}
		return {
			point: n,
			el: s
		}
	}
	var bM = E,
		SM = A,
		MM = La();

	function IM(t, e, i, n, a) {
		var o = t.axis;
		if (!o.scale.isBlank() && o.containData(e))
			if (t.involveSeries) {
				var r = function(l, t) {
						var u = t.axis,
							h = u.dim,
							c = l,
							d = [],
							f = Number.MAX_VALUE,
							p = -1;
						return bM(t.seriesModels, function(e, t) {
							var i, n, a = e.getData().mapDimension(h, !0);
							if (e.getAxisTooltipData) {
								var o = e.getAxisTooltipData(a, l, u);
								n = o.dataIndices, i = o.nestestValue
							} else {
								if (!(n = e.getData().indicesOfNearest(a[0], l, "category" === u.type ? .5 : null)).length) return;
								i = e.getData().get(a[0], n[0])
							}
							if (null != i && isFinite(i)) {
								var r = l - i,
									s = Math.abs(r);
								s <= f && ((s < f || 0 <= r && p < 0) && (f = s, p = r, c = i, d.length = 0), bM(n, function(t) {
									d.push({
										seriesIndex: e.seriesIndex,
										dataIndexInside: t,
										dataIndex: e.getData().getRawIndex(t)
									})
								}))
							}
						}), {
							payloadBatch: d,
							snapToValue: c
						}
					}(e, t),
					s = r.payloadBatch,
					l = r.snapToValue;
				s[0] && null == a.seriesIndex && L(a, s[0]), !n && t.snap && o.containData(l) && null != l && (e = l), i.showPointer(
					t, e, s, a), i.showTooltip(t, r, l)
			} else i.showPointer(t, e)
	}

	function AM(t, e, i, n) {
		t[e.key] = {
			value: i,
			payloadBatch: n
		}
	}

	function TM(t, e, i, n) {
		var a = i.payloadBatch,
			o = e.axis,
			r = o.model,
			s = e.axisPointerModel;
		if (e.triggerTooltip && a.length) {
			var l = e.coordSys.model,
				u = Zm(l),
				h = t.map[u];
			h || (h = t.map[u] = {
				coordSysId: l.id,
				coordSysIndex: l.componentIndex,
				coordSysType: l.type,
				coordSysMainType: l.mainType,
				dataByAxis: []
			}, t.list.push(h)), h.dataByAxis.push({
				axisDim: o.dim,
				axisIndex: r.componentIndex,
				axisType: r.type,
				axisId: r.id,
				value: n,
				valueLabelOpt: {
					precision: s.get("label.precision"),
					formatter: s.get("label.formatter")
				},
				seriesDataIndices: a.slice()
			})
		}
	}

	function DM(t) {
		var e = t.axis.model,
			i = {},
			n = i.axisDim = t.axis.dim;
		return i.axisIndex = i[n + "AxisIndex"] = e.componentIndex, i.axisName = i[n + "AxisName"] = e.name, i.axisId = i[n +
			"AxisId"] = e.id, i
	}

	function CM(t) {
		return !t || null == t[0] || isNaN(t[0]) || null == t[1] || isNaN(t[1])
	}
	sf({
		type: "axisPointer",
		coordSysAxesInfo: null,
		defaultOption: {
			show: "auto",
			triggerOn: null,
			zlevel: 0,
			z: 50,
			type: "line",
			snap: !1,
			triggerTooltip: !0,
			value: null,
			status: null,
			link: [],
			animation: null,
			animationDurationUpdate: 200,
			lineStyle: {
				color: "#aaa",
				width: 1,
				type: "solid"
			},
			shadowStyle: {
				color: "rgba(150,150,150,0.3)"
			},
			label: {
				show: !0,
				formatter: null,
				precision: "auto",
				margin: 3,
				color: "#fff",
				padding: [5, 7, 5, 7],
				backgroundColor: "auto",
				borderColor: null,
				borderWidth: 0,
				shadowBlur: 3,
				shadowColor: "#aaa"
			},
			handle: {
				show: !1,
				icon: "M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",
				size: 45,
				margin: 50,
				color: "#333",
				shadowBlur: 3,
				shadowColor: "#aaa",
				shadowOffsetX: 0,
				shadowOffsetY: 2,
				throttle: 40
			}
		}
	});
	var LM = La(),
		kM = E;

	function PM(t, e, i) {
		if (!v.node) {
			var n = e.getZr();
			LM(n).records || (LM(n).records = {}),
				function(a, o) {
					if (LM(a).initialized) return;

					function t(t, n) {
						a.on(t, function(e) {
							var i = function(i) {
								var n = {
										showTip: [],
										hideTip: []
									},
									a = function(t) {
										var e = n[t.type];
										e ? e.push(t) : (t.dispatchAction = a, i.dispatchAction(t))
									};
								return {
									dispatchAction: a,
									pendings: n
								}
							}(o);
							kM(LM(a).records, function(t) {
									t && n(t, e, i.dispatchAction)
								}),
								function(t, e) {
									var i, n = t.showTip.length,
										a = t.hideTip.length;
									n ? i = t.showTip[n - 1] : a && (i = t.hideTip[a - 1]);
									i && (i.dispatchAction = null, e.dispatchAction(i))
								}(i.pendings, o)
						})
					}
					LM(a).initialized = !0, t("click", A(OM, "click")), t("mousemove", A(OM, "mousemove")), t("globalout", NM)
				}(n, e), (LM(n).records[t] || (LM(n).records[t] = {})).handler = i
		}
	}

	function NM(t, e, i) {
		t.handler("leave", null, i)
	}

	function OM(t, e, i, n) {
		e.handler(t, i, n)
	}

	function EM(t, e) {
		if (!v.node) {
			var i = e.getZr();
			(LM(i).records || {})[t] && (LM(i).records[t] = null)
		}
	}
	var RM = lf({
			type: "axisPointer",
			render: function(t, e, i) {
				var n = e.getComponent("tooltip"),
					a = t.get("triggerOn") || n && n.get("triggerOn") || "mousemove|click";
				PM("axisPointer", i, function(t, e, i) {
					"none" !== a && ("leave" === t || 0 <= a.indexOf(t)) && i({
						type: "updateAxisPointer",
						currTrigger: t,
						x: e && e.offsetX,
						y: e && e.offsetY
					})
				})
			},
			remove: function(t, e) {
				EM(e.getZr(), "axisPointer"), RM.superApply(this._model, "remove", arguments)
			},
			dispose: function(t, e) {
				EM("axisPointer", e), RM.superApply(this._model, "dispose", arguments)
			}
		}),
		zM = La(),
		BM = D,
		VM = T;

	function GM() {}

	function FM(t, e, i, n) {
		! function i(n, t) {
			{
				if (z(n) && z(t)) {
					var a = !0;
					return E(t, function(t, e) {
						a = a && i(n[e], t)
					}), !!a
				}
				return n === t
			}
		}(zM(i).lastProp, n) && (zM(i).lastProp = n, e ? js(i, n, t) : (i.stopAnimation(), i.attr(n)))
	}

	function WM(t, e) {
		t[e.get("label.show") ? "show" : "hide"]()
	}

	function HM(t) {
		return {
			position: t.position.slice(),
			rotation: t.rotation || 0
		}
	}

	function ZM(t, e, i) {
		var n = e.get("z"),
			a = e.get("zlevel");
		t && t.traverse(function(t) {
			"group" !== t.type && (null != n && (t.z = n), null != a && (t.zlevel = a), t.silent = i)
		})
	}

	function UM(t) {
		var e, i = t.get("type"),
			n = t.getModel(i + "Style");
		return "line" === i ? (e = n.getLineStyle()).fill = null : "shadow" === i && ((e = n.getAreaStyle()).stroke = null),
			e
	}

	function XM(t, e, i, n, a) {
		var o = YM(i.get("value"), e.axis, e.ecModel, i.get("seriesDataIndices"), {
				precision: i.get("label.precision"),
				formatter: i.get("label.formatter")
			}),
			r = i.getModel("label"),
			s = Vl(r.get("padding") || 0),
			l = r.getFont(),
			u = un(o, l),
			h = a.position,
			c = u.width + s[1] + s[3],
			d = u.height + s[0] + s[2],
			f = a.align;
		"right" === f && (h[0] -= c), "center" === f && (h[0] -= c / 2);
		var p = a.verticalAlign;
		"bottom" === p && (h[1] -= d), "middle" === p && (h[1] -= d / 2),
			function(t, e, i, n) {
				var a = n.getWidth(),
					o = n.getHeight();
				t[0] = Math.min(t[0] + e, a) - e, t[1] = Math.min(t[1] + i, o) - i, t[0] = Math.max(t[0], 0), t[1] = Math.max(t[1],
					0)
			}(h, c, d, n);
		var g = r.get("backgroundColor");
		g && "auto" !== g || (g = e.get("axisLine.lineStyle.color")), t.label = {
			shape: {
				x: 0,
				y: 0,
				width: c,
				height: d,
				r: r.get("borderRadius")
			},
			position: h.slice(),
			style: {
				text: o,
				textFont: l,
				textFill: r.getTextColor(),
				textPosition: "inside",
				textPadding: s,
				fill: g,
				stroke: r.get("borderColor") || "transparent",
				lineWidth: r.get("borderWidth") || 0,
				shadowBlur: r.get("shadowBlur"),
				shadowColor: r.get("shadowColor"),
				shadowOffsetX: r.get("shadowOffsetX"),
				shadowOffsetY: r.get("shadowOffsetY")
			},
			z2: 10
		}
	}

	function YM(t, e, a, i, n) {
		t = e.scale.parse(t);
		var o = e.scale.getLabel(t, {
				precision: n.precision
			}),
			r = n.formatter;
		if (r) {
			var s = {
				value: Gp(e, t),
				axisDimension: e.dim,
				axisIndex: e.index,
				seriesData: []
			};
			E(i, function(t) {
				var e = a.getSeriesByIndex(t.seriesIndex),
					i = t.dataIndexInside,
					n = e && e.getDataParams(i);
				n && s.seriesData.push(n)
			}), R(r) ? o = r.replace("{value}", o) : O(r) && (o = r(s))
		}
		return o
	}

	function jM(t, e, i) {
		var n = Qt();
		return ae(n, n, i.rotation), ne(n, n, i.position), $s([t.dataToCoord(e), (i.labelOffset || 0) + (i.labelDirection ||
			1) * (i.labelMargin || 0)], n)
	}

	function qM(t, e, i, n, a, o) {
		var r = Cm.innerTextLayout(i.rotation, 0, i.labelDirection);
		i.labelMargin = a.get("label.margin"), XM(e, n, a, o, {
			position: jM(n.axis, t, i),
			align: r.textAlign,
			verticalAlign: r.textVerticalAlign
		})
	}

	function KM(t, e, i) {
		return {
			x1: t[i = i || 0],
			y1: t[1 - i],
			x2: e[i],
			y2: e[1 - i]
		}
	}

	function $M(t, e, i) {
		return {
			x: t[i = i || 0],
			y: t[1 - i],
			width: e[i],
			height: e[1 - i]
		}
	}

	function JM(t, e, i, n, a, o) {
		return {
			cx: t,
			cy: e,
			r0: i,
			r: n,
			startAngle: a,
			endAngle: o,
			clockwise: !0
		}
	}
	Ga((GM.prototype = {
		_group: null,
		_lastGraphicKey: null,
		_handle: null,
		_dragging: !1,
		_lastValue: null,
		_lastStatus: null,
		_payloadInfo: null,
		animationThreshold: 15,
		render: function(t, e, i, n) {
			var a = e.get("value"),
				o = e.get("status");
			if (this._axisModel = t, this._axisPointerModel = e, this._api = i, n || this._lastValue !== a || this._lastStatus !==
				o) {
				this._lastValue = a, this._lastStatus = o;
				var r = this._group,
					s = this._handle;
				if (!o || "hide" === o) return r && r.hide(), void(s && s.hide());
				r && r.show(), s && s.show();
				var l = {};
				this.makeElOption(l, a, t, e, i);
				var u = l.graphicKey;
				u !== this._lastGraphicKey && this.clear(i), this._lastGraphicKey = u;
				var h = this._moveAnimation = this.determineAnimation(t, e);
				if (r) {
					var c = A(FM, e, h);
					this.updatePointerEl(r, l, c, e), this.updateLabelEl(r, l, c, e)
				} else r = this._group = new Si, this.createPointerEl(r, l, t, e), this.createLabelEl(r, l, t, e), i.getZr().add(
					r);
				ZM(r, e, !0), this._renderHandle(a)
			}
		},
		remove: function(t) {
			this.clear(t)
		},
		dispose: function(t) {
			this.clear(t)
		},
		determineAnimation: function(t, e) {
			var i = e.get("animation"),
				n = t.axis,
				a = "category" === n.type,
				o = e.get("snap");
			if (!o && !a) return !1;
			if ("auto" !== i && null != i) return !0 === i;
			var r = this.animationThreshold;
			if (a && n.getBandWidth() > r) return !0;
			if (o) {
				var s = Wm(t).seriesDataCount,
					l = n.getExtent();
				return Math.abs(l[0] - l[1]) / s > r
			}
			return !1
		},
		makeElOption: function(t, e, i, n, a) {},
		createPointerEl: function(t, e, i, n) {
			var a = e.pointer;
			if (a) {
				var o = zM(t).pointerEl = new ol[a.type](BM(e.pointer));
				t.add(o)
			}
		},
		createLabelEl: function(t, e, i, n) {
			if (e.label) {
				var a = zM(t).labelEl = new Hr(BM(e.label));
				t.add(a), WM(a, n)
			}
		},
		updatePointerEl: function(t, e, i) {
			var n = zM(t).pointerEl;
			n && e.pointer && (n.setStyle(e.pointer.style), i(n, {
				shape: e.pointer.shape
			}))
		},
		updateLabelEl: function(t, e, i, n) {
			var a = zM(t).labelEl;
			a && (a.setStyle(e.label.style), i(a, {
				shape: e.label.shape,
				position: e.label.position
			}), WM(a, n))
		},
		_renderHandle: function(t) {
			if (!this._dragging && this.updateHandleTransform) {
				var e, i = this._axisPointerModel,
					n = this._api.getZr(),
					a = this._handle,
					o = i.getModel("handle"),
					r = i.get("status");
				if (!o.get("show") || !r || "hide" === r) return a && n.remove(a), void(this._handle = null);
				this._handle || (e = !0, a = this._handle = el(o.get("icon"), {
					cursor: "move",
					draggable: !0,
					onmousemove: function(t) {
						Ft(t.event)
					},
					onmousedown: VM(this._onHandleDragMove, this, 0, 0),
					drift: VM(this._onHandleDragMove, this),
					ondragend: VM(this._onHandleDragEnd, this)
				}), n.add(a)), ZM(a, i, !1);
				a.setStyle(o.getItemStyle(null, ["color", "borderColor", "borderWidth", "opacity", "shadowColor", "shadowBlur",
					"shadowOffsetX", "shadowOffsetY"
				]));
				var s = o.get("size");
				k(s) || (s = [s, s]), a.attr("scale", [s[0] / 2, s[1] / 2]), dc(this, "_doDispatchAxisPointer", o.get(
					"throttle") || 0, "fixRate"), this._moveHandleToValue(t, e)
			}
		},
		_moveHandleToValue: function(t, e) {
			FM(this._axisPointerModel, !e && this._moveAnimation, this._handle, HM(this.getHandleTransform(t, this._axisModel,
				this._axisPointerModel)))
		},
		_onHandleDragMove: function(t, e) {
			var i = this._handle;
			if (i) {
				this._dragging = !0;
				var n = this.updateHandleTransform(HM(i), [t, e], this._axisModel, this._axisPointerModel);
				this._payloadInfo = n, i.stopAnimation(), i.attr(HM(n)), zM(i).lastProp = null, this._doDispatchAxisPointer()
			}
		},
		_doDispatchAxisPointer: function() {
			if (this._handle) {
				var t = this._payloadInfo,
					e = this._axisModel;
				this._api.dispatchAction({
					type: "updateAxisPointer",
					x: t.cursorPoint[0],
					y: t.cursorPoint[1],
					tooltipOption: t.tooltipOption,
					axesInfo: [{
						axisDim: e.axis.dim,
						axisIndex: e.componentIndex
					}]
				})
			}
		},
		_onHandleDragEnd: function(t) {
			if (this._dragging = !1, this._handle) {
				var e = this._axisPointerModel.get("value");
				this._moveHandleToValue(e), this._api.dispatchAction({
					type: "hideTip"
				})
			}
		},
		getHandleTransform: null,
		updateHandleTransform: null,
		clear: function(t) {
			this._lastValue = null, this._lastStatus = null;
			var e = t.getZr(),
				i = this._group,
				n = this._handle;
			e && i && (this._lastGraphicKey = null, i && e.remove(i), n && e.remove(n), this._group = null, this._handle =
				null, this._payloadInfo = null)
		},
		doClear: function() {},
		buildLabel: function(t, e, i) {
			return {
				x: t[i = i || 0],
				y: t[1 - i],
				width: e[i],
				height: e[1 - i]
			}
		}
	}).constructor = GM);
	var QM = GM.extend({
		makeElOption: function(t, e, i, n, a) {
			var o = i.axis,
				r = o.grid,
				s = n.get("type"),
				l = tI(r, o).getOtherAxis(o).getGlobalExtent(),
				u = o.toGlobalCoord(o.dataToCoord(e, !0));
			if (s && "none" !== s) {
				var h = UM(n),
					c = eI[s](o, u, l);
				c.style = h, t.graphicKey = c.type, t.pointer = c
			}
			qM(e, t, qm(r.model, i), i, n, a)
		},
		getHandleTransform: function(t, e, i) {
			var n = qm(e.axis.grid.model, e, {
				labelInside: !1
			});
			return n.labelMargin = i.get("handle.margin"), {
				position: jM(e.axis, t, n),
				rotation: n.rotation + (n.labelDirection < 0 ? Math.PI : 0)
			}
		},
		updateHandleTransform: function(t, e, i, n) {
			var a = i.axis,
				o = a.grid,
				r = a.getGlobalExtent(!0),
				s = tI(o, a).getOtherAxis(a).getGlobalExtent(),
				l = "x" === a.dim ? 0 : 1,
				u = t.position;
			u[l] += e[l], u[l] = Math.min(r[1], u[l]), u[l] = Math.max(r[0], u[l]);
			var h = (s[1] + s[0]) / 2,
				c = [h, h];
			c[l] = u[l];
			return {
				position: u,
				rotation: t.rotation,
				cursorPoint: c,
				tooltipOption: [{
					verticalAlign: "middle"
				}, {
					align: "center"
				}][l]
			}
		}
	});

	function tI(t, e) {
		var i = {};
		return i[e.dim + "AxisIndex"] = e.index, t.getCartesian(i)
	}
	var eI = {
		line: function(t, e, i) {
			return {
				type: "Line",
				subPixelOptimize: !0,
				shape: KM([e, i[0]], [e, i[1]], iI(t))
			}
		},
		shadow: function(t, e, i) {
			var n = Math.max(1, t.getBandWidth()),
				a = i[1] - i[0];
			return {
				type: "Rect",
				shape: $M([e - n / 2, i[0]], [n, a], iI(t))
			}
		}
	};

	function iI(t) {
		return "x" === t.dim ? 0 : 1
	}
	Um.registerAxisPointerClass("CartesianAxisPointer", QM), Jd(function(t) {
		if (t) {
			t.axisPointer && 0 !== t.axisPointer.length || (t.axisPointer = {});
			var e = t.axisPointer.link;
			e && !k(e) && (t.axisPointer.link = [e])
		}
	}), Qd(cd.PROCESSOR.STATISTIC, function(t, e) {
		t.getComponent("axisPointer").coordSysAxesInfo = Gm(t, e)
	}), tf({
		type: "updateAxisPointer",
		event: "updateAxisPointer",
		update: ":updateAxisPointer"
	}, function(t, e, i) {
		var n = t.currTrigger,
			r = [t.x, t.y],
			a = t,
			o = t.dispatchAction || T(i.dispatchAction, i),
			s = e.getComponent("axisPointer").coordSysAxesInfo;
		if (s) {
			CM(r) && (r = wM({
				seriesIndex: a.seriesIndex,
				dataIndex: a.dataIndex
			}, e).point);
			var l = CM(r),
				u = a.axesInfo,
				h = s.axesInfo,
				c = "leave" === n || CM(r),
				d = {},
				f = {},
				p = {
					list: [],
					map: {}
				},
				g = {
					showPointer: SM(AM, f),
					showTooltip: SM(TM, p)
				};
			bM(s.coordSysMap, function(t, e) {
				var o = l || t.containPoint(r);
				bM(s.coordSysAxesInfo[e], function(t, e) {
					var i = t.axis,
						n = function(t, e) {
							for (var i = 0; i < (t || []).length; i++) {
								var n = t[i];
								if (e.axis.dim === n.axisDim && e.axis.model.componentIndex === n.axisIndex) return n
							}
						}(u, t);
					if (!c && o && (!u || n)) {
						var a = n && n.value;
						null != a || l || (a = i.pointToData(r)), null != a && IM(t, a, g, !1, d)
					}
				})
			});
			var m = {};
			return bM(h, function(a, t) {
					var o = a.linkGroup;
					o && !f[t] && bM(o.axesInfo, function(t, e) {
						var i = f[e];
						if (t !== a && i) {
							var n = i.value;
							o.mapper && (n = a.axis.scale.parse(o.mapper(n, DM(t), DM(a)))), m[a.key] = n
						}
					})
				}), bM(m, function(t, e) {
					IM(h[e], t, g, !0, d)
				}),
				function(a, t, e) {
					var o = e.axesInfo = [];
					bM(t, function(t, e) {
						var i = t.axisPointerModel.option,
							n = a[e];
						n ? (t.useHandle || (i.status = "show"), i.value = n.value, i.seriesDataIndices = (n.payloadBatch || []).slice()) :
							t.useHandle || (i.status = "hide"), "show" === i.status && o.push({
								axisDim: t.axis.dim,
								axisIndex: t.axis.model.componentIndex,
								value: i.value
							})
					})
				}(f, h, d),
				function(t, e, i, n) {
					if (CM(e) || !t.list.length) return n({
						type: "hideTip"
					});
					var a = ((t.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {};
					n({
						type: "showTip",
						escapeConnect: !0,
						x: e[0],
						y: e[1],
						tooltipOption: i.tooltipOption,
						position: i.position,
						dataIndexInside: a.dataIndexInside,
						dataIndex: a.dataIndex,
						seriesIndex: a.seriesIndex,
						dataByCoordSys: t.list
					})
				}(p, r, t, o),
				function(t, e, i) {
					var n = i.getZr(),
						a = "axisPointerLastHighlights",
						o = MM(n)[a] || {},
						r = MM(n)[a] = {};
					bM(t, function(t, e) {
						var i = t.axisPointerModel.option;
						"show" === i.status && bM(i.seriesDataIndices, function(t) {
							var e = t.seriesIndex + " | " + t.dataIndex;
							r[e] = t
						})
					});
					var s = [],
						l = [];
					E(o, function(t, e) {
						r[e] || l.push(t)
					}), E(r, function(t, e) {
						o[e] || s.push(t)
					}), l.length && i.dispatchAction({
						type: "downplay",
						escapeConnect: !0,
						batch: l
					}), s.length && i.dispatchAction({
						type: "highlight",
						escapeConnect: !0,
						batch: s
					})
				}(h, 0, i), d
		}
	});
	var nI = ["x", "y"],
		aI = ["width", "height"],
		oI = GM.extend({
			makeElOption: function(t, e, i, n, a) {
				var o = i.axis,
					r = o.coordinateSystem,
					s = lI(r, 1 - sI(o)),
					l = r.dataToPoint(e)[0],
					u = n.get("type");
				if (u && "none" !== u) {
					var h = UM(n),
						c = rI[u](o, l, s);
					c.style = h, t.graphicKey = c.type, t.pointer = c
				}
				qM(e, t, mM(i), i, n, a)
			},
			getHandleTransform: function(t, e, i) {
				var n = mM(e, {
					labelInside: !1
				});
				return n.labelMargin = i.get("handle.margin"), {
					position: jM(e.axis, t, n),
					rotation: n.rotation + (n.labelDirection < 0 ? Math.PI : 0)
				}
			},
			updateHandleTransform: function(t, e, i, n) {
				var a = i.axis,
					o = a.coordinateSystem,
					r = sI(a),
					s = lI(o, r),
					l = t.position;
				l[r] += e[r], l[r] = Math.min(s[1], l[r]), l[r] = Math.max(s[0], l[r]);
				var u = lI(o, 1 - r),
					h = (u[1] + u[0]) / 2,
					c = [h, h];
				return c[r] = l[r], {
					position: l,
					rotation: t.rotation,
					cursorPoint: c,
					tooltipOption: {
						verticalAlign: "middle"
					}
				}
			}
		}),
		rI = {
			line: function(t, e, i) {
				return {
					type: "Line",
					subPixelOptimize: !0,
					shape: KM([e, i[0]], [e, i[1]], sI(t))
				}
			},
			shadow: function(t, e, i) {
				var n = t.getBandWidth(),
					a = i[1] - i[0];
				return {
					type: "Rect",
					shape: $M([e - n / 2, i[0]], [n, a], sI(t))
				}
			}
		};

	function sI(t) {
		return t.isHorizontal() ? 0 : 1
	}

	function lI(t, e) {
		var i = t.getRect();
		return [i[nI[e]], i[nI[e]] + i[aI[e]]]
	}
	Um.registerAxisPointerClass("SingleAxisPointer", oI), lf({
		type: "single"
	});
	var uI = Wh.extend({
		type: "series.themeRiver",
		dependencies: ["singleAxis"],
		nameMap: null,
		init: function(t) {
			uI.superApply(this, "init", arguments), this.legendDataProvider = function() {
				return this.getRawData()
			}
		},
		fixData: function(t) {
			var e = t.length,
				i = Ra(t, function(t) {
					return t[2]
				}),
				n = [];
			i.buckets.each(function(t, e) {
				n.push({
					name: e,
					dataList: t
				})
			});
			for (var a = n.length, o = -1, r = -1, s = 0; s < a; ++s) {
				var l = n[s].dataList.length;
				o < l && (o = l, r = s)
			}
			for (var u = 0; u < a; ++u)
				if (u !== r)
					for (var h = n[u].name, c = 0; c < o; ++c) {
						for (var d = n[r].dataList[c][0], f = n[u].dataList.length, p = -1, g = 0; g < f; ++g) {
							if (n[u].dataList[g][0] === d) {
								p = g;
								break
							}
						} - 1 === p && (t[e] = [], t[e][0] = d, t[e][1] = 0, t[e][2] = h, e++)
					}
			return t
		},
		getInitialData: function(t, e) {
			for (var i = e.queryComponents({
					mainType: "singleAxis",
					index: this.get("singleAxisIndex"),
					id: this.get("singleAxisId")
				})[0].get("type"), n = M(t.data, function(t) {
					return void 0 !== t[2]
				}), a = this.fixData(n || []), o = [], r = this.nameMap = Q(), s = 0, l = 0; l < a.length; ++l) o.push(a[l][2]),
				r.get(a[l][2]) || (r.set(a[l][2], s), s++);
			var u = Wf(a, {
					coordDimensions: ["single"],
					dimensionsDefine: [{
						name: "time",
						type: mf(i)
					}, {
						name: "value",
						type: "float"
					}, {
						name: "name",
						type: "ordinal"
					}],
					encodeDefine: {
						single: 0,
						value: 1,
						itemName: 2
					}
				}),
				h = new Tf(u, this);
			return h.initData(a), h
		},
		getLayerSeries: function() {
			for (var i = this.getData(), t = i.count(), e = [], n = 0; n < t; ++n) e[n] = n;
			var a = i.mapDimension("single"),
				o = Ra(e, function(t) {
					return i.get("name", t)
				}),
				r = [];
			return o.buckets.each(function(t, e) {
				t.sort(function(t, e) {
					return i.get(a, t) - i.get(a, e)
				}), r.push({
					name: e,
					indices: t
				})
			}), r
		},
		getAxisTooltipData: function(t, e, i) {
			k(t) || (t = t ? [t] : []);
			for (var n, a = this.getData(), o = this.getLayerSeries(), r = [], s = o.length, l = 0; l < s; ++l) {
				for (var u = Number.MAX_VALUE, h = -1, c = o[l].indices.length, d = 0; d < c; ++d) {
					var f = a.get(t[0], o[l].indices[d]),
						p = Math.abs(f - e);
					p <= u && (n = f, u = p, h = o[l].indices[d])
				}
				r.push(h)
			}
			return {
				dataIndices: r,
				nestestValue: n
			}
		},
		formatTooltip: function(t) {
			var e = this.getData(),
				i = e.getName(t),
				n = e.get(e.mapDimension("value"), t);
			return !isNaN(n) && null != n || (n = "-"), Wl(i + " : " + n)
		},
		defaultOption: {
			zlevel: 0,
			z: 2,
			coordinateSystem: "singleAxis",
			boundaryGap: ["10%", "10%"],
			singleAxisIndex: 0,
			animationEasing: "linear",
			label: {
				margin: 4,
				show: !0,
				position: "left",
				color: "#000",
				fontSize: 11
			},
			emphasis: {
				label: {
					show: !0
				}
			}
		}
	});
	hf({
		type: "themeRiver",
		init: function() {
			this._layers = []
		},
		render: function(b, t, e) {
			var S = b.getData(),
				M = this.group,
				I = b.getLayerSeries(),
				i = S.getLayout("layoutInfo"),
				n = i.rect,
				a = i.boundaryGap;

			function o(t) {
				return t.name
			}
			M.attr("position", [0, n.y + a[0]]);
			var r = new df(this._layersSeries || [], I, o, o),
				A = {};

			function s(t, e, i) {
				var n = this._layers;
				if ("remove" !== t) {
					for (var a, o, r, s = [], l = [], u = I[e].indices, h = 0; h < u.length; h++) {
						var c = S.getItemLayout(u[h]),
							d = c.x,
							f = c.y0,
							p = c.y;
						s.push([d, f]), l.push([d, f + p]), a = S.getItemVisual(u[h], "color")
					}
					var g = S.getItemLayout(u[0]),
						m = S.getItemModel(u[h - 1]),
						v = m.getModel("label"),
						y = v.get("margin");
					if ("add" === t) {
						var x = A[e] = new Si;
						o = new $g({
							shape: {
								points: s,
								stackedOnPoints: l,
								smooth: .4,
								stackedOnSmooth: .4,
								smoothConstraint: !1
							},
							z2: 0
						}), r = new Dr({
							style: {
								x: g.x - y,
								y: g.y0 + g.y / 2
							}
						}), x.add(o), x.add(r), M.add(x), o.setClipPath(function(t, e, i) {
							var n = new Hr({
								shape: {
									x: t.x - 10,
									y: t.y - 10,
									width: 0,
									height: t.height + 20
								}
							});
							return qs(n, {
								shape: {
									width: t.width + 20,
									height: t.height + 20
								}
							}, e, i), n
						}(o.getBoundingRect(), b, function() {
							o.removeClipPath()
						}))
					} else {
						x = n[i];
						o = x.childAt(0), r = x.childAt(1), M.add(x), A[e] = x, js(o, {
							shape: {
								points: s,
								stackedOnPoints: l
							}
						}, b), js(r, {
							style: {
								x: g.x - y,
								y: g.y0 + g.y / 2
							}
						}, b)
					}
					var _ = m.getModel("emphasis.itemStyle"),
						w = m.getModel("itemStyle");
					Gs(r.style, v, {
						text: v.get("show") ? b.getFormattedLabel(u[h - 1], "normal") || S.getName(u[h - 1]) : null,
						textVerticalAlign: "middle"
					}), o.setStyle(L({
						fill: a
					}, w.getItemStyle(["color"]))), Os(o, _.getItemStyle())
				} else M.remove(n[e])
			}
			r.add(T(s, this, "add")).update(T(s, this, "update")).remove(T(s, this, "remove")).execute(), this._layersSeries =
				I, this._layers = A
		},
		dispose: function() {}
	});

	function hI(i, t, e) {
		if (i.count())
			for (var n, a = t.coordinateSystem, o = t.getLayerSeries(), r = i.mapDimension("single"), s = i.mapDimension(
					"value"), l = N(o, function(t) {
					return N(t.indices, function(t) {
						var e = a.dataToPoint(i.get(r, t));
						return e[1] = i.get(s, t), e
					})
				}), u = function(t) {
					for (var e = t.length, i = t[0].length, n = [], a = [], o = 0, r = {}, s = 0; s < i; ++s) {
						for (var l = 0, u = 0; l < e; ++l) u += t[l][s][1];
						o < u && (o = u), n.push(u)
					}
					for (var h = 0; h < i; ++h) a[h] = (o - n[h]) / 2;
					for (var c = o = 0; c < i; ++c) {
						var d = n[c] + a[c];
						o < d && (o = d)
					}
					return r.y0 = a, r.max = o, r
				}(l), h = u.y0, c = e / u.max, d = o.length, f = o[0].indices.length, p = 0; p < f; ++p) {
				n = h[p] * c, i.setItemLayout(o[0].indices[p], {
					layerIndex: 0,
					x: l[0][p][0],
					y0: n,
					y: l[0][p][1] * c
				});
				for (var g = 1; g < d; ++g) n += l[g - 1][p][1] * c, i.setItemLayout(o[g].indices[p], {
					layerIndex: g,
					x: l[g][p][0],
					y0: n,
					y: l[g][p][1] * c
				})
			}
	}
	nf(function(t, e) {
		t.eachSeriesByType("themeRiver", function(t) {
			var e = t.getData(),
				i = t.coordinateSystem,
				n = {},
				a = i.getRect();
			n.rect = a;
			var o = t.get("boundaryGap"),
				r = i.getAxis();
			(n.boundaryGap = o, "horizontal" === r.orient) ? (o[0] = xl(o[0], a.height), o[1] = xl(o[1], a.height), hI(e, t,
				a.height - o[0] - o[1])) : (o[0] = xl(o[0], a.width), o[1] = xl(o[1], a.width), hI(e, t, a.width - o[0] - o[1]));
			e.setLayout("layoutInfo", n)
		})
	}), af(function(t) {
		t.eachSeriesByType("themeRiver", function(a) {
			var o = a.getData(),
				r = a.getRawData(),
				s = a.get("color"),
				l = Q();
			o.each(function(t) {
				l.set(o.getRawIndex(t), t)
			}), r.each(function(t) {
				var e = r.getName(t),
					i = s[(a.nameMap.get(e) - 1) % s.length];
				r.setItemVisual(t, "color", i);
				var n = l.get(t);
				null != n && o.setItemVisual(n, "color", i)
			})
		})
	}), Qd(kv("themeRiver")), Wh.extend({
		type: "series.sunburst",
		_viewRoot: null,
		getInitialData: function(t, e) {
			var i = {
				name: t.name,
				children: t.data
			};
			! function i(t) {
				var n = 0;
				E(t.children, function(t) {
					i(t);
					var e = t.value;
					k(e) && (e = e[0]), n += e
				});
				var e = t.value;
				k(e) && (e = e[0]);
				null != e && !isNaN(e) || (e = n);
				e < 0 && (e = 0);
				k(t.value) ? t.value[0] = e : t.value = e
			}(i);
			var n = t.levels || [],
				a = {};
			return a.levels = n, Ky.createTree(i, this, a).data
		},
		optionUpdated: function() {
			this.resetViewRoot()
		},
		getDataParams: function(t) {
			var e = Wh.prototype.getDataParams.apply(this, arguments),
				i = this.getData().tree.getNodeByDataIndex(t);
			return e.treePathInfo = gx(i, this), e
		},
		defaultOption: {
			zlevel: 0,
			z: 2,
			center: ["50%", "50%"],
			radius: [0, "75%"],
			clockwise: !0,
			startAngle: 90,
			minAngle: 0,
			percentPrecision: 2,
			stillShowZeroSum: !0,
			highlightPolicy: "descendant",
			nodeClick: "rootToNode",
			renderLabelForZeroData: !1,
			label: {
				rotate: "radial",
				show: !0,
				opacity: 1,
				align: "center",
				position: "inside",
				distance: 5,
				silent: !0,
				emphasis: {}
			},
			itemStyle: {
				borderWidth: 1,
				borderColor: "white",
				borderType: "solid",
				shadowBlur: 0,
				shadowColor: "rgba(0, 0, 0, 0.2)",
				shadowOffsetX: 0,
				shadowOffsetY: 0,
				opacity: 1,
				emphasis: {},
				highlight: {
					opacity: 1
				},
				downplay: {
					opacity: .9
				}
			},
			animationType: "expansion",
			animationDuration: 1e3,
			animationDurationUpdate: 500,
			animationEasing: "cubicOut",
			data: [],
			levels: [],
			sort: "desc"
		},
		getViewRoot: function() {
			return this._viewRoot
		},
		resetViewRoot: function(t) {
			t ? this._viewRoot = t : t = this._viewRoot;
			var e = this.getRawData().tree.root;
			t && (t === e || e.contains(t)) || (this._viewRoot = e)
		}
	});
	var cI = "none",
		dI = "ancestor",
		fI = "self",
		pI = 2,
		gI = 4;

	function mI(t, e, i) {
		Si.call(this);
		var n = new Pr({
			z2: pI
		});
		n.seriesIndex = e.seriesIndex;
		var a = new Dr({
			z2: gI,
			silent: t.getModel("label").get("silent")
		});

		function o() {
			a.ignore = a.hoverIgnore
		}

		function r() {
			a.ignore = a.normalIgnore
		}
		this.add(n), this.add(a), this.updateData(!0, t, "normal", e, i), this.on("emphasis", o).on("normal", r).on(
			"mouseover", o).on("mouseout", r)
	}
	var vI = mI.prototype;
	vI.updateData = function(t, e, i, n, a) {
		(this.node = e).piece = this, n = n || this._seriesModel, a = a || this._ecModel;
		var o = this.childAt(0);
		o.dataIndex = e.dataIndex;
		var r = e.getModel(),
			s = e.getLayout(),
			l = L({}, s);
		l.label = null;
		var u = function(t, e, i) {
			var n = t.getVisual("color"),
				a = t.getVisual("visualMeta");
			a && 0 !== a.length || (n = null);
			var o = t.getModel("itemStyle").get("color"); {
				if (o) return o;
				if (n) return n;
				if (0 === t.depth) return i.option.color[0];
				var r = i.option.color.length;
				o = i.option.color[function(t) {
					var e = t;
					for (; 1 < e.depth;) e = e.parentNode;
					return _(t.getAncestors()[0].children, e)
				}(t) % r]
			}
			return o
		}(e, 0, a);
		! function(t, e, i) {
			e.getData().setItemVisual(t.dataIndex, "color", i)
		}(e, n, u);
		var h, c = r.getModel("itemStyle").getItemStyle();
		"normal" === i ? h = c : h = m(r.getModel(i + ".itemStyle").getItemStyle(), c);
		h = C({
				lineJoin: "bevel",
				fill: h.fill || u
			}, h), t ? (o.setShape(l), o.shape.r = s.r0, js(o, {
				shape: {
					r: s.r
				}
			}, n, e.dataIndex), o.useStyle(h)) : "object" == typeof h.fill && h.fill.type || "object" == typeof o.style.fill &&
			o.style.fill.type ? (js(o, {
				shape: l
			}, n), o.useStyle(h)) : js(o, {
				shape: l,
				style: h
			}, n), this._updateLabel(n, u, i);
		var d = r.getShallow("cursor");
		if (d && o.attr("cursor", d), t) {
			var f = n.getShallow("highlightPolicy");
			this._initEvents(o, e, n, f)
		}
		this._seriesModel = n || this._seriesModel, this._ecModel = a || this._ecModel
	}, vI.onEmphasis = function(e) {
		var i = this;
		this.node.hostTree.root.eachNode(function(t) {
			t.piece && (i.node === t ? t.piece.updateData(!1, t, "emphasis") : ! function(t, e, i) {
				return i !== cI && (i === fI ? t === e : i === dI ? t === e || t.isAncestorOf(e) : t === e || t.isDescendantOf(
					e))
			}(t, i.node, e) ? e !== cI && t.piece.childAt(0).trigger("downplay") : t.piece.childAt(0).trigger("highlight"))
		})
	}, vI.onNormal = function() {
		this.node.hostTree.root.eachNode(function(t) {
			t.piece && t.piece.updateData(!1, t, "normal")
		})
	}, vI.onHighlight = function() {
		this.updateData(!1, this.node, "highlight")
	}, vI.onDownplay = function() {
		this.updateData(!1, this.node, "downplay")
	}, vI._updateLabel = function(t, e, i) {
		var n = this.node.getModel(),
			a = n.getModel("label"),
			o = "normal" === i || "emphasis" === i ? a : n.getModel(i + ".label"),
			r = n.getModel("emphasis.label"),
			s = W(t.getFormattedLabel(this.node.dataIndex, i, null, null, "label"), this.node.name);
		!1 === S("show") && (s = "");
		var l = this.node.getLayout(),
			u = o.get("minAngle");
		null == u && (u = a.get("minAngle")), u = u / 180 * Math.PI;
		var h = l.endAngle - l.startAngle;
		null != u && Math.abs(h) < u && (s = "");
		var c = this.childAt(1);
		Bs(c.style, c.hoverStyle || {}, a, r, {
			defaultText: o.getShallow("show") ? s : null,
			autoColor: e,
			useInsideStyle: !0
		});
		var d, f = (l.startAngle + l.endAngle) / 2,
			p = Math.cos(f),
			g = Math.sin(f),
			m = S("position"),
			v = S("distance") || 0,
			y = S("align");
		"outside" === m ? (d = l.r + v, y = f > Math.PI / 2 ? "right" : "left") : y && "center" !== y ? "left" === y ? (d =
			l.r0 + v, f > Math.PI / 2 && (y = "right")) : "right" === y && (d = l.r - v, f > Math.PI / 2 && (y = "left")) : (
			d = (l.r + l.r0) / 2, y = "center"), c.attr("style", {
			text: s,
			textAlign: y,
			textVerticalAlign: S("verticalAlign") || "middle",
			opacity: S("opacity")
		});
		var x = d * p + l.cx,
			_ = d * g + l.cy;
		c.attr("position", [x, _]);
		var w = S("rotate"),
			b = 0;

		function S(t) {
			var e = o.get(t);
			return null == e ? a.get(t) : e
		}
		"radial" === w ? (b = -f) < -Math.PI / 2 && (b += Math.PI) : "tangential" === w ? (b = Math.PI / 2 - f) > Math.PI /
			2 ? b -= Math.PI : b < -Math.PI / 2 && (b += Math.PI) : "number" == typeof w && (b = w * Math.PI / 180), c.attr(
				"rotation", b)
	}, vI._initEvents = function(t, e, i, n) {
		t.off("mouseover").off("mouseout").off("emphasis").off("normal");

		function a() {
			r.onEmphasis(n)
		}

		function o() {
			r.onNormal()
		}
		var r = this;
		i.isAnimationEnabled() && t.on("mouseover", a).on("mouseout", o).on("emphasis", a).on("normal", o).on("downplay",
			function() {
				r.onDownplay()
			}).on("highlight", function() {
			r.onHighlight()
		})
	}, w(mI, Si);
	ec.extend({
		type: "sunburst",
		init: function() {},
		render: function(a, o, t, e) {
			var n = this;
			this.seriesModel = a, this.api = t, this.ecModel = o;
			var r = a.getData(),
				s = r.tree.root,
				i = a.getViewRoot(),
				l = this.group,
				u = a.get("renderLabelForZeroData"),
				h = [];
			i.eachNode(function(t) {
				h.push(t)
			});
			var c = this._oldChildren || [];
			if (function(i, n) {
					if (0 === i.length && 0 === n.length) return;

					function t(t) {
						return t.getId()
					}

					function e(t, e) {
						! function(t, e) {
							u || !t || t.getValue() || (t = null);
							if (t !== s && e !== s)
								if (e && e.piece) t ? (e.piece.updateData(!1, t, "normal", a, o), r.setItemGraphicEl(t.dataIndex, e.piece)) :
									function(t) {
										if (!t) return;
										t.piece && (l.remove(t.piece), t.piece = null)
									}(e);
								else if (t) {
								var i = new mI(t, a, o);
								l.add(i), r.setItemGraphicEl(t.dataIndex, i)
							}
						}(null == t ? null : i[t], null == e ? null : n[e])
					}
					new df(n, i, t, t).add(e).update(e).remove(A(e, null)).execute()
				}(h, c), function(t, e) {
					if (0 < e.depth) {
						n.virtualPiece ? n.virtualPiece.updateData(!1, t, "normal", a, o) : (n.virtualPiece = new mI(t, a, o), l.add(
							n.virtualPiece)), e.piece._onclickEvent && e.piece.off("click", e.piece._onclickEvent);
						var i = function(t) {
							n._rootToNode(e.parentNode)
						};
						e.piece._onclickEvent = i, n.virtualPiece.on("click", i)
					} else n.virtualPiece && (l.remove(n.virtualPiece), n.virtualPiece = null)
				}(s, i), e && e.highlight && e.highlight.piece) {
				var d = a.getShallow("highlightPolicy");
				e.highlight.piece.onEmphasis(d)
			} else if (e && e.unhighlight) {
				var f = this.virtualPiece;
				!f && s.children.length && (f = s.children[0].piece), f && f.onNormal()
			}
			this._initEvents(), this._oldChildren = h
		},
		dispose: function() {},
		_initEvents: function() {
			function t(o) {
				var r = !1;
				s.seriesModel.getViewRoot().eachNode(function(t) {
					if (!r && t.piece && t.piece.childAt(0) === o.target) {
						var e = t.getModel().get("nodeClick");
						if ("rootToNode" === e) s._rootToNode(t);
						else if ("link" === e) {
							var i = t.getModel(),
								n = i.get("link");
							if (n) {
								var a = i.get("target", !0) || "_blank";
								window.open(n, a)
							}
						}
						r = !0
					}
				})
			}
			var s = this;
			this.group._onclickEvent && this.group.off("click", this.group._onclickEvent), this.group.on("click", t), this.group
				._onclickEvent = t
		},
		_rootToNode: function(t) {
			t !== this.seriesModel.getViewRoot() && this.api.dispatchAction({
				type: "sunburstRootToNode",
				from: this.uid,
				seriesId: this.seriesModel.id,
				targetNode: t
			})
		},
		containPoint: function(t, e) {
			var i = e.getData().getItemLayout(0);
			if (i) {
				var n = t[0] - i.cx,
					a = t[1] - i.cy,
					o = Math.sqrt(n * n + a * a);
				return o <= i.r && o >= i.r0
			}
		}
	});
	var yI = "sunburstRootToNode";
	tf({
		type: yI,
		update: "updateView"
	}, function(a, t) {
		t.eachComponent({
			mainType: "series",
			subType: "sunburst",
			query: a
		}, function(t, e) {
			var i = dx(a, [yI], t);
			if (i) {
				var n = t.getViewRoot();
				n && (a.direction = px(n, i.node) ? "rollUp" : "drillDown"), t.resetViewRoot(i.node)
			}
		})
	});
	var xI = "sunburstHighlight";
	tf({
		type: xI,
		update: "updateView"
	}, function(n, t) {
		t.eachComponent({
			mainType: "series",
			subType: "sunburst",
			query: n
		}, function(t, e) {
			var i = dx(n, [xI], t);
			i && (n.highlight = i.node)
		})
	});
	tf({
		type: "sunburstUnhighlight",
		update: "updateView"
	}, function(i, t) {
		t.eachComponent({
			mainType: "series",
			subType: "sunburst",
			query: i
		}, function(t, e) {
			i.unhighlight = !0
		})
	});
	var _I = Math.PI / 180;

	function wI(t, e) {
		if ("function" == typeof e) return t.sort(e);
		var n = "asc" === e;
		return t.sort(function(t, e) {
			var i = (t.getValue() - e.getValue()) * (n ? 1 : -1);
			return 0 == i ? (t.dataIndex - e.dataIndex) * (n ? -1 : 1) : i
		})
	}

	function bI(o, r) {
		return r = r || [0, 0], N(["x", "y"], function(t, e) {
			var i = this.getAxis(t),
				n = r[e],
				a = o[e] / 2;
			return "category" === i.type ? i.getBandWidth() : Math.abs(i.dataToCoord(n - a) - i.dataToCoord(n + a))
		}, this)
	}
	af(A(Av, "sunburst")), nf(A(function(t, e, C, i) {
		e.eachSeriesByType(t, function(t) {
			var e = t.get("center"),
				i = t.get("radius");
			k(i) || (i = [0, i]), k(e) || (e = [e, e]);
			var n = C.getWidth(),
				a = C.getHeight(),
				h = Math.min(n, a),
				c = xl(e[0], n),
				d = xl(e[1], a),
				f = xl(i[0], h / 2),
				o = xl(i[1], h / 2),
				r = -t.get("startAngle") * _I,
				p = t.get("minAngle") * _I,
				g = t.getData().tree.root,
				s = t.getViewRoot(),
				m = s.depth,
				l = t.get("sort");
			null != l && ! function e(t, i) {
				var n = t.children || [];
				t.children = wI(n, i);
				n.length && E(t.children, function(t) {
					e(t, i)
				})
			}(s, l);
			var u = 0;
			E(s.children, function(t) {
				isNaN(t.getValue()) || u++
			});
			var v = s.getValue(),
				y = Math.PI / (v || u) * 2,
				x = 0 < s.depth,
				_ = s.height - (x ? -1 : 1),
				w = (o - f) / (_ || 1),
				b = t.get("clockwise"),
				S = t.get("stillShowZeroSum"),
				M = b ? 1 : -1,
				I = function(t, e) {
					if (t) {
						var i = e;
						if (t !== g) {
							var n = t.getValue(),
								a = 0 === v && S ? y : n * y;
							a < p && (a = p), i = e + M * a;
							var o = t.depth - m - (x ? -1 : 1),
								r = f + w * o,
								s = f + w * (1 + o),
								l = t.getModel();
							null != l.get("r0") && (r = xl(l.get("r0"), h / 2)), null != l.get("r") && (s = xl(l.get("r"), h / 2)), t.setLayout({
								angle: a,
								startAngle: e,
								endAngle: i,
								clockwise: b,
								cx: c,
								cy: d,
								r0: r,
								r: s
							})
						}
						if (t.children && t.children.length) {
							var u = 0;
							E(t.children, function(t) {
								u += I(t, e + u)
							})
						}
						return i - e
					}
				};
			if (x) {
				var A = f,
					T = f + w,
					D = 2 * Math.PI;
				g.setLayout({
					angle: D,
					startAngle: r,
					endAngle: r + D,
					clockwise: b,
					cx: c,
					cy: d,
					r0: A,
					r: T
				})
			}
			I(s, r)
		})
	}, "sunburst")), Qd(A(kv, "sunburst"));

	function SI(o, r) {
		return r = r || [0, 0], N([0, 1], function(t) {
			var e = r[t],
				i = o[t] / 2,
				n = [],
				a = [];
			return n[t] = e - i, a[t] = e + i, n[1 - t] = a[1 - t] = r[1 - t], Math.abs(this.dataToPoint(n)[t] - this.dataToPoint(
				a)[t])
		}, this)
	}

	function MI(t, e) {
		var i = this.getAxis(),
			n = e instanceof Array ? e[0] : e,
			a = (t instanceof Array ? t[0] : t) / 2;
		return "category" === i.type ? i.getBandWidth() : Math.abs(i.dataToCoord(n - a) - i.dataToCoord(n + a))
	}

	function II(s, l) {
		return N(["Radius", "Angle"], function(t, e) {
			var i = this["get" + t + "Axis"](),
				n = l[e],
				a = s[e] / 2,
				o = "dataTo" + t,
				r = "category" === i.type ? i.getBandWidth() : Math.abs(i[o](n - a) - i[o](n + a));
			return "Angle" === t && (r = r * Math.PI / 180), r
		}, this)
	}
	var AI = rs,
		TI = ["itemStyle"],
		DI = ["emphasis", "itemStyle"],
		CI = ["label"],
		LI = ["emphasis", "label"],
		kI = "e\0\0",
		PI = {
			cartesian2d: function(e) {
				var t = e.grid.getRect();
				return {
					coordSys: {
						type: "cartesian2d",
						x: t.x,
						y: t.y,
						width: t.width,
						height: t.height
					},
					api: {
						coord: function(t) {
							return e.dataToPoint(t)
						},
						size: T(bI, e)
					}
				}
			},
			geo: function(e) {
				var t = e.getBoundingRect();
				return {
					coordSys: {
						type: "geo",
						x: t.x,
						y: t.y,
						width: t.width,
						height: t.height,
						zoom: e.getZoom()
					},
					api: {
						coord: function(t) {
							return e.dataToPoint(t)
						},
						size: T(SI, e)
					}
				}
			},
			singleAxis: function(e) {
				var t = e.getRect();
				return {
					coordSys: {
						type: "singleAxis",
						x: t.x,
						y: t.y,
						width: t.width,
						height: t.height
					},
					api: {
						coord: function(t) {
							return e.dataToPoint(t)
						},
						size: T(MI, e)
					}
				}
			},
			polar: function(a) {
				var o = a.getRadiusAxis(),
					r = a.getAngleAxis(),
					t = o.getExtent();
				return t[0] > t[1] && t.reverse(), {
					coordSys: {
						type: "polar",
						cx: a.cx,
						cy: a.cy,
						r: t[1],
						r0: t[0]
					},
					api: {
						coord: T(function(t) {
							var e = o.dataToRadius(t[0]),
								i = r.dataToAngle(t[1]),
								n = a.coordToPoint([e, i]);
							return n.push(e, i * Math.PI / 180), n
						}),
						size: T(II, a)
					}
				}
			},
			calendar: function(i) {
				var t = i.getRect(),
					e = i.getRangeInfo();
				return {
					coordSys: {
						type: "calendar",
						x: t.x,
						y: t.y,
						width: t.width,
						height: t.height,
						cellWidth: i.getCellWidth(),
						cellHeight: i.getCellHeight(),
						rangeInfo: {
							start: e.start,
							end: e.end,
							weeks: e.weeks,
							dayCount: e.allDay
						}
					},
					api: {
						coord: function(t, e) {
							return i.dataToPoint(t, e)
						}
					}
				}
			}
		};

	function NI(t, e, i, n, a) {
		null == i[t] || a || (e[t] = i[t], i[t] = n[t])
	}

	function OI(o, r, e, t) {
		var i = o.get("renderItem"),
			n = o.coordinateSystem,
			a = {};
		n && (a = n.prepareCustoms ? n.prepareCustoms() : PI[n.type](n));
		var s, l, u, h, c, d = C({
				getWidth: t.getWidth,
				getHeight: t.getHeight,
				getZr: t.getZr,
				getDevicePixelRatio: t.getDevicePixelRatio,
				value: function(t, e) {
					return null == e && (e = s), r.get(r.getDimension(t || 0), e)
				},
				style: function(t, e) {
					null == e && (e = s), g(e);
					var i = l.getModel(TI).getItemStyle();
					null != c && (i.fill = c);
					var n = r.getItemVisual(e, "opacity");
					null != n && (i.opacity = n);
					var a = t ? VI(t, u) : u;
					return Gs(i, a, null, {
						autoColor: c,
						isRectText: !0
					}), i.text = a.getShallow("show") ? H(o.getFormattedLabel(e, "normal"), bg(r, e)) : null, t && GI(i, t), i
				},
				styleEmphasis: function(t, e) {
					null == e && (e = s), g(e);
					var i = l.getModel(DI).getItemStyle(),
						n = t ? VI(t, h) : h;
					return Gs(i, n, null, {
						isRectText: !0
					}, !0), i.text = n.getShallow("show") ? Z(o.getFormattedLabel(e, "emphasis"), o.getFormattedLabel(e, "normal"),
						bg(r, e)) : null, t && GI(i, t), i
				},
				visual: function(t, e) {
					return null == e && (e = s), r.getItemVisual(e, t)
				},
				barLayout: function(t) {
					if (n.getBaseAxis) {
						return function(t) {
							var e = [],
								i = t.axis;
							if ("category" === i.type) {
								for (var n = i.getBandWidth(), a = 0; a < t.count; a++) e.push(C({
									bandWidth: n,
									axisKey: "axis0",
									stackId: rp + a
								}, t));
								var o = dp(e),
									r = [];
								for (a = 0; a < t.count; a++) {
									var s = o.axis0[rp + a];
									s.offsetCenter = s.offset + s.width / 2, r.push(s)
								}
								return r
							}
						}(C({
							axis: n.getBaseAxis()
						}, t))
					}
				},
				currentSeriesIndices: function() {
					return e.getCurrentSeriesIndices()
				},
				font: function(t) {
					return Xs(t, e)
				}
			}, a.api || {}),
			f = {
				context: {},
				seriesId: o.id,
				seriesName: o.name,
				seriesIndex: o.seriesIndex,
				coordSys: a.coordSys,
				dataInsideLength: r.count(),
				encode: function(a) {
					var o = {};
					return E(a.dimensions, function(t, e) {
						var i = a.getDimensionInfo(t);
						if (!i.isExtraCoord) {
							var n = i.coordDim;
							(o[n] = o[n] || [])[i.coordDimIndex] = e
						}
					}), o
				}(o.getData())
			},
			p = !0;
		return function(t, e) {
			return s = t, p = !0, i && i(C({
				dataIndexInside: t,
				dataIndex: r.getRawIndex(t),
				actionType: e ? e.type : null
			}, f), d)
		};

		function g(t) {
			null == t && (t = s), p && (l = r.getItemModel(t), u = l.getModel(CI), h = l.getModel(LI), c = r.getItemVisual(t,
				"color"), p = !1)
		}
	}

	function EI(t, e, i, n, a, o) {
		return (t = RI(t, e, i, n, a, o, !0)) && o.setItemGraphicEl(e, t), t
	}

	function RI(t, e, i, n, a, o, r) {
		var s = !i,
			l = (i = i || {}).type,
			u = i.shape,
			h = i.style;
		if (t && (s || null != l && l !== t.__customGraphicType || "path" === l && function(t) {
					return t && (t.hasOwnProperty("pathData") || t.hasOwnProperty("d"))
				}(u) && WI(u) !== t.__customPathData || "image" === l && HI(h, "image") && h.image !== t.__customImagePath ||
				"text" === l && HI(u, "text") && h.text !== t.__customText) && (a.remove(t), t = null), !s) {
			var c = !t;
			return function(e, t, i, n, a, o, r) {
				var s = {},
					l = i.style || {};
				if (i.shape && (s.shape = D(i.shape)), i.position && (s.position = i.position.slice()), i.scale && (s.scale = i.scale
						.slice()), i.origin && (s.origin = i.origin.slice()), i.rotation && (s.rotation = i.rotation), "image" === e.type &&
					i.style) {
					var u = s.style = {};
					E(["x", "y", "width", "height"], function(t) {
						NI(t, u, l, e.style, o)
					})
				}
				if ("text" === e.type && i.style) {
					u = s.style = {};
					E(["x", "y"], function(t) {
							NI(t, u, l, e.style, o)
						}), !l.hasOwnProperty("textFill") && l.fill && (l.textFill = l.fill), !l.hasOwnProperty("textStroke") && l.stroke &&
						(l.textStroke = l.stroke)
				}
				if ("group" !== e.type && (e.useStyle(l), o)) {
					e.style.opacity = 0;
					var h = l.opacity;
					null == h && (h = 1), qs(e, {
						style: {
							opacity: h
						}
					}, n, t)
				}
				o ? e.attr(s) : js(e, s, n, t), i.hasOwnProperty("z2") && e.attr("z2", i.z2 || 0), i.hasOwnProperty("silent") &&
					e.attr("silent", i.silent), i.hasOwnProperty("invisible") && e.attr("invisible", i.invisible), i.hasOwnProperty(
						"ignore") && e.attr("ignore", i.ignore), i.hasOwnProperty("info") && e.attr("info", i.info);
				var c = i.styleEmphasis;
				Ds(e, c), r && Es(e, !1 !== c)
			}(t = t || function(t) {
				var e, i = t.type;
				if ("path" === i) {
					var n = t.shape,
						a = null != n.width && null != n.height ? {
							x: n.x || 0,
							y: n.y || 0,
							width: n.width,
							height: n.height
						} : null,
						o = WI(n);
					(e = gs(o, null, a, n.layout || "center")).__customPathData = o
				} else if ("image" === i)(e = new Yn({})).__customImagePath = t.style.image;
				else if ("text" === i)(e = new Dr({})).__customText = t.style.text;
				else if ("group" === i) e = new Si;
				else {
					if ("compoundPath" === i) throw new Error('"compoundPath" is not supported yet.');
					e = new(ps(i))
				}
				return e.__customGraphicType = i, e.name = t.name, e
			}(i), e, i, n, 0, c, r), "group" === l && function(t, e, i, n, a) {
				var o = i.children,
					r = o ? o.length : 0,
					s = i.$mergeChildren,
					l = "byName" === s || i.diffChildrenByName,
					u = !1 === s;
				if (!r && !l && !u) return;
				if (l) return function(t) {
					new df(t.oldChildren, t.newChildren, zI, zI, t).add(BI).update(BI).remove(FI).execute()
				}({
					oldChildren: t.children() || [],
					newChildren: o || [],
					dataIndex: e,
					animatableModel: n,
					group: t,
					data: a
				});
				u && t.removeAll();
				for (var h = 0; h < r; h++) o[h] && RI(t.childAt(h), e, o[h], n, t, a)
			}(t, e, i, n, o), a.add(t), t
		}
	}

	function zI(t, e) {
		var i = t && t.name;
		return null != i ? i : kI + e
	}

	function BI(t, e) {
		var i = this.context,
			n = null != t ? i.newChildren[t] : null;
		RI(null != e ? i.oldChildren[e] : null, i.dataIndex, n, i.animatableModel, i.group, i.data)
	}

	function VI(i, t) {
		var n = new dl({}, t);
		return E(AI, function(t, e) {
			i.hasOwnProperty(t) && (n.option[e] = i[t])
		}), n
	}

	function GI(t, e) {
		for (var i in e) !e.hasOwnProperty(i) && AI.hasOwnProperty(i) || (t[i] = e[i])
	}

	function FI(t) {
		var e = this.context,
			i = e.oldChildren[t];
		i && e.group.remove(i)
	}

	function WI(t) {
		return t && (t.pathData || t.d)
	}

	function HI(t, e) {
		return t && t.hasOwnProperty(e)
	}

	function ZI(t) {
		return t.get("stack") || "__ec_stack_" + t.seriesIndex
	}

	function UI(t, e) {
		return e.dim + t.model.componentIndex
	}

	function XI(t, e) {
		vg.call(this, "radius", t, e), this.type = "category"
	}
	Wh.extend({
		type: "series.custom",
		dependencies: ["grid", "polar", "geo", "singleAxis", "calendar"],
		defaultOption: {
			coordinateSystem: "cartesian2d",
			zlevel: 0,
			z: 2,
			legendHoverLink: !0,
			useTransform: !0,
			clip: !1
		},
		getInitialData: function(t, e) {
			return Xf(this.getSource(), this)
		},
		getDataParams: function(t, e, i) {
			var n = Wh.prototype.getDataParams.apply(this, arguments);
			return i && (n.info = i.info), n
		}
	}), ec.extend({
		type: "custom",
		_data: null,
		render: function(i, t, e, n) {
			var a = this._data,
				o = i.getData(),
				r = this.group,
				s = OI(i, o, t, e);
			o.diff(a).add(function(t) {
				EI(null, t, s(t, n), i, r, o)
			}).update(function(t, e) {
				EI(a.getItemGraphicEl(e), t, s(t, n), i, r, o)
			}).remove(function(t) {
				var e = a.getItemGraphicEl(t);
				e && r.remove(e)
			}).execute();
			var l = i.get("clip", !0) ? tm(i.coordinateSystem, !1, i) : null;
			l ? r.setClipPath(l) : r.removeClipPath(), this._data = o
		},
		incrementalPrepareRender: function(t, e, i) {
			this.group.removeAll(), this._data = null
		},
		incrementalRender: function(t, e, i, n, a) {
			var o = e.getData(),
				r = OI(e, o, i, n);

			function s(t) {
				t.isGroup || (t.incremental = !0, t.useHoverLayer = !0)
			}
			for (var l = t.start; l < t.end; l++) {
				EI(null, l, r(l, a), e, this.group, o).traverse(s)
			}
		},
		dispose: et,
		filterForExposedEvent: function(t, e, i, n) {
			var a = e.element;
			if (null == a || i.name === a) return !0;
			for (;
				(i = i.parent) && i !== this.group;)
				if (i.name === a) return !0;
			return !1
		}
	}), XI.prototype = {
		constructor: XI,
		pointToData: function(t, e) {
			return this.polar.pointToData(t, e)["radius" === this.dim ? 0 : 1]
		},
		dataToRadius: vg.prototype.dataToCoord,
		radiusToData: vg.prototype.coordToData
	}, w(XI, vg);
	var YI = La();

	function jI(t, e) {
		e = e || [0, 360], vg.call(this, "angle", t, e), this.type = "category"
	}
	jI.prototype = {
		constructor: jI,
		pointToData: function(t, e) {
			return this.polar.pointToData(t, e)["radius" === this.dim ? 0 : 1]
		},
		dataToAngle: vg.prototype.dataToCoord,
		angleToData: vg.prototype.coordToData,
		calculateCategoryInterval: function() {
			var t = this.getLabelModel(),
				e = this.scale,
				i = e.getExtent(),
				n = e.count();
			if (i[1] - i[0] < 1) return 0;
			var a = i[0],
				o = this.dataToCoord(a + 1) - this.dataToCoord(a),
				r = Math.abs(o),
				s = un(a, t.getFont(), "center", "top"),
				l = Math.max(s.height, 7) / r;
			isNaN(l) && (l = 1 / 0);
			var u = Math.max(0, Math.floor(l)),
				h = YI(this.model),
				c = h.lastAutoInterval,
				d = h.lastTickCount;
			return null != c && null != d && Math.abs(c - u) <= 1 && Math.abs(d - n) <= 1 && u < c ? u = c : (h.lastTickCount =
				n, h.lastAutoInterval = u), u
		}
	}, w(jI, vg);

	function qI(t) {
		this.name = t || "", this.cx = 0, this.cy = 0, this._radiusAxis = new XI, this._angleAxis = new jI, this._radiusAxis
			.polar = this._angleAxis.polar = this
	}
	qI.prototype = {
		type: "polar",
		axisPointerEnabled: !0,
		constructor: qI,
		dimensions: ["radius", "angle"],
		model: null,
		containPoint: function(t) {
			var e = this.pointToCoord(t);
			return this._radiusAxis.contain(e[0]) && this._angleAxis.contain(e[1])
		},
		containData: function(t) {
			return this._radiusAxis.containData(t[0]) && this._angleAxis.containData(t[1])
		},
		getAxis: function(t) {
			return this["_" + t + "Axis"]
		},
		getAxes: function() {
			return [this._radiusAxis, this._angleAxis]
		},
		getAxesByScale: function(t) {
			var e = [],
				i = this._angleAxis,
				n = this._radiusAxis;
			return i.scale.type === t && e.push(i), n.scale.type === t && e.push(n), e
		},
		getAngleAxis: function() {
			return this._angleAxis
		},
		getRadiusAxis: function() {
			return this._radiusAxis
		},
		getOtherAxis: function(t) {
			var e = this._angleAxis;
			return t === e ? this._radiusAxis : e
		},
		getBaseAxis: function() {
			return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAngleAxis()
		},
		getTooltipAxes: function(t) {
			var e = null != t && "auto" !== t ? this.getAxis(t) : this.getBaseAxis();
			return {
				baseAxes: [e],
				otherAxes: [this.getOtherAxis(e)]
			}
		},
		dataToPoint: function(t, e) {
			return this.coordToPoint([this._radiusAxis.dataToRadius(t[0], e), this._angleAxis.dataToAngle(t[1], e)])
		},
		pointToData: function(t, e) {
			var i = this.pointToCoord(t);
			return [this._radiusAxis.radiusToData(i[0], e), this._angleAxis.angleToData(i[1], e)]
		},
		pointToCoord: function(t) {
			var e = t[0] - this.cx,
				i = t[1] - this.cy,
				n = this.getAngleAxis(),
				a = n.getExtent(),
				o = Math.min(a[0], a[1]),
				r = Math.max(a[0], a[1]);
			n.inverse ? o = r - 360 : r = o + 360;
			var s = Math.sqrt(e * e + i * i);
			e /= s, i /= s;
			for (var l = Math.atan2(-i, e) / Math.PI * 180, u = l < o ? 1 : -1; l < o || r < l;) l += 360 * u;
			return [s, l]
		},
		coordToPoint: function(t) {
			var e = t[0],
				i = t[1] / 180 * Math.PI;
			return [Math.cos(i) * e + this.cx, -Math.sin(i) * e + this.cy]
		},
		getArea: function() {
			var t = this.getAngleAxis(),
				e = this.getRadiusAxis().getExtent().slice();
			e[0] > e[1] && e.reverse();
			var i = t.getExtent(),
				n = Math.PI / 180;
			return {
				cx: this.cx,
				cy: this.cy,
				r0: e[0],
				r: e[1],
				startAngle: -i[0] * n,
				endAngle: -i[1] * n,
				clockwise: t.inverse,
				contain: function(t, e) {
					var i = t - this.cx,
						n = e - this.cy,
						a = i * i + n * n,
						o = this.r,
						r = this.r0;
					return a <= o * o && r * r <= a
				}
			}
		}
	};
	var KI = fu.extend({
		type: "polarAxis",
		axis: null,
		getCoordSysModel: function() {
			return this.ecModel.queryComponents({
				mainType: "polar",
				index: this.option.polarIndex,
				id: this.option.polarId
			})[0]
		}
	});
	m(KI.prototype, Hp);
	var $I = {
		splitNumber: 5
	};

	function JI(t, e) {
		return e.type || (e.data ? "category" : "value")
	}

	function QI(t, e) {
		var i = this,
			n = i.getAngleAxis(),
			a = i.getRadiusAxis();
		if (n.scale.setExtent(1 / 0, -1 / 0), a.scale.setExtent(1 / 0, -1 / 0), t.eachSeries(function(t) {
				if (t.coordinateSystem === i) {
					var e = t.getData();
					E(e.mapDimension("radius", !0), function(t) {
						a.scale.unionExtentFromData(e, Uf(e, t))
					}), E(e.mapDimension("angle", !0), function(t) {
						n.scale.unionExtentFromData(e, Uf(e, t))
					})
				}
			}), zp(n.scale, n.model), zp(a.scale, a.model), "category" === n.type && !n.onBand) {
			var o = n.getExtent(),
				r = 360 / n.scale.count();
			n.inverse ? o[1] += r : o[1] -= r, n.setExtent(o[0], o[1])
		}
	}

	function tA(t, e) {
		if (t.type = e.get("type"), t.scale = Bp(e), t.onBand = e.get("boundaryGap") && "category" === t.type, t.inverse = e
			.get("inverse"), "angleAxis" === e.mainType) {
			t.inverse ^= e.get("clockwise");
			var i = e.get("startAngle");
			t.setExtent(i, i + (t.inverse ? -360 : 360))
		}(e.axis = t).model = e
	}
	mm("angle", KI, JI, {
		startAngle: 90,
		clockwise: !0,
		splitNumber: 12,
		axisLabel: {
			rotate: !1
		}
	}), mm("radius", KI, JI, $I), sf({
		type: "polar",
		dependencies: ["polarAxis", "angleAxis"],
		coordinateSystem: null,
		findAxisModel: function(t) {
			var e;
			return this.ecModel.eachComponent(t, function(t) {
				t.getCoordSysModel() === this && (e = t)
			}, this), e
		},
		defaultOption: {
			zlevel: 0,
			z: 0,
			center: ["50%", "50%"],
			radius: "80%"
		}
	}), Hu.register("polar", {
		dimensions: qI.prototype.dimensions,
		create: function(i, s) {
			var l = [];
			return i.eachComponent("polar", function(t, e) {
				var i = new qI(e);
				i.update = QI;
				var n = i.getRadiusAxis(),
					a = i.getAngleAxis(),
					o = t.findAxisModel("radiusAxis"),
					r = t.findAxisModel("angleAxis");
				tA(n, o), tA(a, r),
					function(t, e, i) {
						var n = e.get("center"),
							a = i.getWidth(),
							o = i.getHeight();
						t.cx = xl(n[0], a), t.cy = xl(n[1], o);
						var r = t.getRadiusAxis(),
							s = Math.min(a, o) / 2,
							l = e.get("radius");
						null == l ? l = [0, "100%"] : k(l) || (l = [0, l]), l = [xl(l[0], s), xl(l[1], s)], r.inverse ? r.setExtent(
							l[1], l[0]) : r.setExtent(l[0], l[1])
					}(i, t, s), l.push(i), (t.coordinateSystem = i).model = t
			}), i.eachSeries(function(t) {
				if ("polar" === t.get("coordinateSystem")) {
					var e = i.queryComponents({
						mainType: "polar",
						index: t.get("polarIndex"),
						id: t.get("polarId")
					})[0];
					t.coordinateSystem = e.coordinateSystem
				}
			}), l
		}
	});
	var eA = ["axisLine", "axisLabel", "axisTick", "splitLine", "splitArea"];

	function iA(t, e, i) {
		e[1] > e[0] && (e = e.slice().reverse());
		var n = t.coordToPoint([e[0], i]),
			a = t.coordToPoint([e[1], i]);
		return {
			x1: n[0],
			y1: n[1],
			x2: a[0],
			y2: a[1]
		}
	}

	function nA(t) {
		return t.getRadiusAxis().inverse ? 0 : 1
	}

	function aA(t) {
		var e = t[0],
			i = t[t.length - 1];
		e && i && Math.abs(Math.abs(e.coord - i.coord) - 360) < 1e-4 && t.pop()
	}
	Um.extend({
		type: "angleAxis",
		axisPointerClass: "PolarAxisPointer",
		render: function(e, t) {
			if (this.group.removeAll(), e.get("show")) {
				var i = e.axis,
					n = i.polar,
					a = n.getRadiusAxis().getExtent(),
					o = i.getTicksCoords(),
					r = N(i.getViewLabels(), function(t) {
						return (t = D(t)).coord = i.dataToCoord(t.tickValue), t
					});
				aA(r), aA(o), E(eA, function(t) {
					!e.get(t + ".show") || i.scale.isBlank() && "axisLine" !== t || this["_" + t](e, n, o, a, r)
				}, this)
			}
		},
		_axisLine: function(t, e, i, n) {
			var a, o = t.getModel("axisLine.lineStyle"),
				r = nA(e),
				s = r ? 0 : 1;
			(a = 0 === n[s] ? new Lr({
				shape: {
					cx: e.cx,
					cy: e.cy,
					r: n[r]
				},
				style: o.getLineStyle(),
				z2: 1,
				silent: !0
			}) : new Nr({
				shape: {
					cx: e.cx,
					cy: e.cy,
					r: n[r],
					r0: n[s]
				},
				style: o.getLineStyle(),
				z2: 1,
				silent: !0
			})).style.fill = null, this.group.add(a)
		},
		_axisTick: function(t, e, i, n) {
			var a = t.getModel("axisTick"),
				o = (a.get("inside") ? -1 : 1) * a.get("length"),
				r = n[nA(e)],
				s = N(i, function(t) {
					return new Ur({
						shape: iA(e, [r, r + o], t.coord)
					})
				});
			this.group.add(ys(s, {
				style: C(a.getModel("lineStyle").getLineStyle(), {
					stroke: t.get("axisLine.lineStyle.color")
				})
			}))
		},
		_axisLabel: function(c, d, t, f, e) {
			var p = c.getCategories(!0),
				g = c.getModel("axisLabel"),
				m = g.get("margin"),
				v = c.get("triggerEvent");
			E(e, function(t, e) {
				var i = g,
					n = t.tickValue,
					a = f[nA(d)],
					o = d.coordToPoint([a + m, t.coord]),
					r = d.cx,
					s = d.cy,
					l = Math.abs(o[0] - r) / a < .3 ? "center" : o[0] > r ? "left" : "right",
					u = Math.abs(o[1] - s) / a < .3 ? "middle" : o[1] > s ? "top" : "bottom";
				p && p[n] && p[n].textStyle && (i = new dl(p[n].textStyle, g, g.ecModel));
				var h = new Dr({
					silent: Cm.isLabelSilent(c)
				});
				this.group.add(h), Gs(h.style, i, {
					x: o[0],
					y: o[1],
					textFill: i.getTextColor() || c.get("axisLine.lineStyle.color"),
					text: t.formattedLabel,
					textAlign: l,
					textVerticalAlign: u
				}), v && (h.eventData = Cm.makeAxisEventDataBase(c), h.eventData.targetType = "axisLabel", h.eventData.value =
					t.rawLabel)
			}, this)
		},
		_splitLine: function(t, e, i, n) {
			var a = t.getModel("splitLine").getModel("lineStyle"),
				o = a.get("color"),
				r = 0;
			o = o instanceof Array ? o : [o];
			for (var s = [], l = 0; l < i.length; l++) {
				var u = r++ % o.length;
				s[u] = s[u] || [], s[u].push(new Ur({
					shape: iA(e, n, i[l].coord)
				}))
			}
			for (l = 0; l < s.length; l++) this.group.add(ys(s[l], {
				style: C({
					stroke: o[l % o.length]
				}, a.getLineStyle()),
				silent: !0,
				z: t.get("z")
			}))
		},
		_splitArea: function(t, e, i, n) {
			if (i.length) {
				var a = t.getModel("splitArea").getModel("areaStyle"),
					o = a.get("color"),
					r = 0;
				o = o instanceof Array ? o : [o];
				for (var s = [], l = Math.PI / 180, u = -i[0].coord * l, h = Math.min(n[0], n[1]), c = Math.max(n[0], n[1]), d =
						t.get("clockwise"), f = 1; f < i.length; f++) {
					var p = r++ % o.length;
					s[p] = s[p] || [], s[p].push(new Pr({
						shape: {
							cx: e.cx,
							cy: e.cy,
							r0: h,
							r: c,
							startAngle: u,
							endAngle: -i[f].coord * l,
							clockwise: d
						},
						silent: !0
					})), u = -i[f].coord * l
				}
				for (f = 0; f < s.length; f++) this.group.add(ys(s[f], {
					style: C({
						fill: o[f % o.length]
					}, a.getAreaStyle()),
					silent: !0
				}))
			}
		}
	});
	var oA = ["axisLine", "axisTickLabel", "axisName"],
		rA = ["splitLine", "splitArea"];
	Um.extend({
		type: "radiusAxis",
		axisPointerClass: "PolarAxisPointer",
		render: function(e, t) {
			if (this.group.removeAll(), e.get("show")) {
				var i = e.axis,
					n = i.polar,
					a = n.getAngleAxis(),
					o = i.getTicksCoords(),
					r = a.getExtent()[0],
					s = i.getExtent(),
					l = function(t, e, i) {
						return {
							position: [t.cx, t.cy],
							rotation: i / 180 * Math.PI,
							labelDirection: -1,
							tickDirection: -1,
							nameDirection: 1,
							labelRotate: e.getModel("axisLabel").get("rotate"),
							z2: 1
						}
					}(n, e, r),
					u = new Cm(e, l);
				E(oA, u.add, u), this.group.add(u.getGroup()), E(rA, function(t) {
					e.get(t + ".show") && !i.scale.isBlank() && this["_" + t](e, n, r, s, o)
				}, this)
			}
		},
		_splitLine: function(t, e, i, n, a) {
			var o = t.getModel("splitLine").getModel("lineStyle"),
				r = o.get("color"),
				s = 0;
			r = r instanceof Array ? r : [r];
			for (var l = [], u = 0; u < a.length; u++) {
				var h = s++ % r.length;
				l[h] = l[h] || [], l[h].push(new Lr({
					shape: {
						cx: e.cx,
						cy: e.cy,
						r: a[u].coord
					},
					silent: !0
				}))
			}
			for (u = 0; u < l.length; u++) this.group.add(ys(l[u], {
				style: C({
					stroke: r[u % r.length],
					fill: null
				}, o.getLineStyle()),
				silent: !0
			}))
		},
		_splitArea: function(t, e, i, n, a) {
			if (a.length) {
				var o = t.getModel("splitArea").getModel("areaStyle"),
					r = o.get("color"),
					s = 0;
				r = r instanceof Array ? r : [r];
				for (var l = [], u = a[0].coord, h = 1; h < a.length; h++) {
					var c = s++ % r.length;
					l[c] = l[c] || [], l[c].push(new Pr({
						shape: {
							cx: e.cx,
							cy: e.cy,
							r0: u,
							r: a[h].coord,
							startAngle: 0,
							endAngle: 2 * Math.PI
						},
						silent: !0
					})), u = a[h].coord
				}
				for (h = 0; h < l.length; h++) this.group.add(ys(l[h], {
					style: C({
						fill: r[h % r.length]
					}, o.getAreaStyle()),
					silent: !0
				}))
			}
		}
	});
	var sA = GM.extend({
		makeElOption: function(t, e, i, n, a) {
			var o = i.axis;
			"angle" === o.dim && (this.animationThreshold = Math.PI / 18);
			var r, s = o.polar,
				l = s.getOtherAxis(o).getExtent();
			r = o["dataTo" + Kl(o.dim)](e);
			var u = n.get("type");
			if (u && "none" !== u) {
				var h = UM(n),
					c = lA[u](o, s, r, l, h);
				c.style = h, t.graphicKey = c.type, t.pointer = c
			}
			var d = n.get("label.margin");
			XM(t, i, n, a, function(t, e, i, n, a) {
				var o = e.axis,
					r = o.dataToCoord(t),
					s = n.getAngleAxis().getExtent()[0];
				s = s / 180 * Math.PI;
				var l, u, h, c = n.getRadiusAxis().getExtent();
				if ("radius" === o.dim) {
					var d = Qt();
					ae(d, d, s), ne(d, d, [n.cx, n.cy]), l = $s([r, -a], d);
					var f = e.getModel("axisLabel").get("rotate") || 0,
						p = Cm.innerTextLayout(s, f * Math.PI / 180, -1);
					u = p.textAlign, h = p.textVerticalAlign
				} else {
					var g = c[1];
					l = n.coordToPoint([g + a, r]);
					var m = n.cx,
						v = n.cy;
					u = Math.abs(l[0] - m) / g < .3 ? "center" : l[0] > m ? "left" : "right", h = Math.abs(l[1] - v) / g < .3 ?
						"middle" : l[1] > v ? "top" : "bottom"
				}
				return {
					position: l,
					align: u,
					verticalAlign: h
				}
			}(e, i, 0, s, d))
		}
	});
	var lA = {
		line: function(t, e, i, n, a) {
			return "angle" === t.dim ? {
				type: "Line",
				shape: KM(e.coordToPoint([n[0], i]), e.coordToPoint([n[1], i]))
			} : {
				type: "Circle",
				shape: {
					cx: e.cx,
					cy: e.cy,
					r: i
				}
			}
		},
		shadow: function(t, e, i, n, a) {
			var o = Math.max(1, t.getBandWidth()),
				r = Math.PI / 180;
			return "angle" === t.dim ? {
				type: "Sector",
				shape: JM(e.cx, e.cy, n[0], n[1], (-i - o / 2) * r, (o / 2 - i) * r)
			} : {
				type: "Sector",
				shape: JM(e.cx, e.cy, i - o / 2, i + o / 2, 0, 2 * Math.PI)
			}
		}
	};

	function uA(n, t) {
		t.update = "updateView", tf(t, function(t, e) {
			var i = {};
			return e.eachComponent({
				mainType: "geo",
				query: t
			}, function(e) {
				e[n](t.name), E(e.coordinateSystem.regions, function(t) {
					i[t.name] = e.isSelected(t.name) || !1
				})
			}), {
				selected: i,
				name: t.name
			}
		})
	}
	Um.registerAxisPointerClass("PolarAxisPointer", sA), nf(A(function(t, e, i) {
		var N = {},
			O = function(t) {
				var g = {};
				E(t, function(t, e) {
					var i = t.getData(),
						n = t.coordinateSystem,
						a = n.getBaseAxis(),
						o = UI(n, a),
						r = a.getExtent(),
						s = "category" === a.type ? a.getBandWidth() : Math.abs(r[1] - r[0]) / i.count(),
						l = g[o] || {
							bandWidth: s,
							remainedWidth: s,
							autoWidthCount: 0,
							categoryGap: "20%",
							gap: "30%",
							stacks: {}
						},
						u = l.stacks;
					g[o] = l;
					var h = ZI(t);
					u[h] || l.autoWidthCount++, u[h] = u[h] || {
						width: 0,
						maxWidth: 0
					};
					var c = xl(t.get("barWidth"), s),
						d = xl(t.get("barMaxWidth"), s),
						f = t.get("barGap"),
						p = t.get("barCategoryGap");
					c && !u[h].width && (c = Math.min(l.remainedWidth, c), u[h].width = c, l.remainedWidth -= c), d && (u[h].maxWidth =
						d), null != f && (l.gap = f), null != p && (l.categoryGap = p)
				});
				var d = {};
				return E(g, function(t, i) {
					d[i] = {};
					var e = t.stacks,
						n = t.bandWidth,
						a = xl(t.categoryGap, n),
						o = xl(t.gap, 1),
						r = t.remainedWidth,
						s = t.autoWidthCount,
						l = (r - a) / (s + (s - 1) * o);
					l = Math.max(l, 0), E(e, function(t, e) {
						var i = t.maxWidth;
						i && i < l && (i = Math.min(i, r), t.width && (i = Math.min(i, t.width)), r -= i, t.width = i, s--)
					}), l = (r - a) / (s + (s - 1) * o), l = Math.max(l, 0);
					var u, h = 0;
					E(e, function(t, e) {
						t.width || (t.width = l), h += (u = t).width * (1 + o)
					}), u && (h -= u.width * o);
					var c = -h / 2;
					E(e, function(t, e) {
						d[i][e] = d[i][e] || {
							offset: c,
							width: t.width
						}, c += t.width * (1 + o)
					})
				}), d
			}(M(e.getSeriesByType(t), function(t) {
				return !e.isSeriesFiltered(t) && t.coordinateSystem && "polar" === t.coordinateSystem.type
			}));
		e.eachSeriesByType(t, function(t) {
			if ("polar" === t.coordinateSystem.type) {
				var e = t.getData(),
					i = t.coordinateSystem,
					n = i.getBaseAxis(),
					a = UI(i, n),
					o = ZI(t),
					r = O[a][o],
					s = r.offset,
					l = r.width,
					u = i.getOtherAxis(n),
					h = t.coordinateSystem.cx,
					c = t.coordinateSystem.cy,
					d = t.get("barMinHeight") || 0,
					f = t.get("barMinAngle") || 0;
				N[o] = N[o] || [];
				for (var p = e.mapDimension(u.dim), g = e.mapDimension(n.dim), m = Zf(e, p), v = "radius" !== n.dim || !t.get(
						"roundCap", !0), y = u.getExtent()[0], x = 0, _ = e.count(); x < _; x++) {
					var w = e.get(p, x),
						b = e.get(g, x);
					if (!isNaN(w)) {
						var S, M, I, A, T = 0 <= w ? "p" : "n",
							D = y;
						if (m && (N[o][b] || (N[o][b] = {
								p: y,
								n: y
							}), D = N[o][b][T]), "radius" === u.dim) {
							var C = u.dataToRadius(w) - y,
								L = n.dataToAngle(b);
							Math.abs(C) < d && (C = (C < 0 ? -1 : 1) * d), M = (S = D) + C, A = (I = L - s) - l, m && (N[o][b][T] = M)
						} else {
							var k = u.dataToAngle(w, v) - y,
								P = n.dataToRadius(b);
							Math.abs(k) < f && (k = (k < 0 ? -1 : 1) * f), M = (S = P + s) + l, A = (I = D) + k, m && (N[o][b][T] = A)
						}
						e.setItemLayout(x, {
							cx: h,
							cy: c,
							r0: S,
							r: M,
							startAngle: -I * Math.PI / 180,
							endAngle: -A * Math.PI / 180
						})
					}
				}
			}
		}, this)
	}, "bar")), lf({
		type: "polar"
	}), b(fu.extend({
		type: "geo",
		coordinateSystem: null,
		layoutMode: "box",
		init: function(t) {
			fu.prototype.init.apply(this, arguments), ba(t, "label", ["show"])
		},
		optionUpdated: function() {
			var t = this.option,
				i = this;
			t.regions = By.getFilledRegions(t.regions, t.map, t.nameMap), this._optionModelMap = S(t.regions || [],
				function(t, e) {
					return e.name && t.set(e.name, new dl(e, i)), t
				}, Q()), this.updateSelectedMap(t.regions)
		},
		defaultOption: {
			zlevel: 0,
			z: 0,
			show: !0,
			left: "center",
			top: "center",
			aspectScale: null,
			silent: !1,
			map: "",
			boundingCoords: null,
			center: null,
			zoom: 1,
			scaleLimit: null,
			label: {
				show: !1,
				color: "#000"
			},
			itemStyle: {
				borderWidth: .5,
				borderColor: "#444",
				color: "#eee"
			},
			emphasis: {
				label: {
					show: !0,
					color: "rgb(100,0,0)"
				},
				itemStyle: {
					color: "rgba(255,215,0,0.8)"
				}
			},
			regions: []
		},
		getRegionModel: function(t) {
			return this._optionModelMap.get(t) || new dl(null, this, this.ecModel)
		},
		getFormattedLabel: function(t, e) {
			var i = this.getRegionModel(t).get("label" + ("normal" === e ? "." : e + ".") + "formatter"),
				n = {
					name: t
				};
			return "function" == typeof i ? (n.status = e, i(n)) : "string" == typeof i ? i.replace("{a}", null != t ? t :
				"") : void 0
		},
		setZoom: function(t) {
			this.option.zoom = t
		},
		setCenter: function(t) {
			this.option.center = t
		}
	}), xv), lf({
		type: "geo",
		init: function(t, e) {
			var i = new My(e, !0);
			this._mapDraw = i, this.group.add(i.group)
		},
		render: function(t, e, i, n) {
			if (!n || "geoToggleSelect" !== n.type || n.from !== this.uid) {
				var a = this._mapDraw;
				t.get("show") ? a.draw(t, e, i, this, n) : this._mapDraw.group.removeAll(), this.group.silent = t.get("silent")
			}
		},
		dispose: function() {
			this._mapDraw && this._mapDraw.remove()
		}
	}), uA("toggleSelected", {
		type: "geoToggleSelect",
		event: "geoselectchanged"
	}), uA("select", {
		type: "geoSelect",
		event: "geoselected"
	}), uA("unSelect", {
		type: "geoUnSelect",
		event: "geounselected"
	});

	function hA(t, e, i) {
		this._model = t
	}

	function cA(t, e, i, n) {
		var a = i.calendarModel,
			o = i.seriesModel,
			r = a ? a.coordinateSystem : o ? o.coordinateSystem : null;
		return r === this ? r[t](n) : null
	}
	hA.prototype = {
			constructor: hA,
			type: "calendar",
			dimensions: ["time", "value"],
			getDimensionsInfo: function() {
				return [{
					name: "time",
					type: "time"
				}, "value"]
			},
			getRangeInfo: function() {
				return this._rangeInfo
			},
			getModel: function() {
				return this._model
			},
			getRect: function() {
				return this._rect
			},
			getCellWidth: function() {
				return this._sw
			},
			getCellHeight: function() {
				return this._sh
			},
			getOrient: function() {
				return this._orient
			},
			getFirstDayOfWeek: function() {
				return this._firstDayOfWeek
			},
			getDateInfo: function(t) {
				var e = (t = Ll(t)).getFullYear(),
					i = t.getMonth() + 1;
				i = i < 10 ? "0" + i : i;
				var n = t.getDate();
				n = n < 10 ? "0" + n : n;
				var a = t.getDay();
				return {
					y: e,
					m: i,
					d: n,
					day: a = Math.abs((a + 7 - this.getFirstDayOfWeek()) % 7),
					time: t.getTime(),
					formatedDate: e + "-" + i + "-" + n,
					date: t
				}
			},
			getNextNDay: function(t, e) {
				return 0 === (e = e || 0) || (t = new Date(this.getDateInfo(t).time)).setDate(t.getDate() + e), this.getDateInfo(
					t)
			},
			update: function(t, e) {
				this._firstDayOfWeek = +this._model.getModel("dayLabel").get("firstDay"), this._orient = this._model.get("orient"),
					this._lineWidth = this._model.getModel("itemStyle").getItemStyle().lineWidth || 0, this._rangeInfo = this._getRangeInfo(
						this._initRangeOption());
				var i = this._rangeInfo.weeks || 1,
					n = ["width", "height"],
					a = this._model.get("cellSize").slice(),
					o = this._model.getBoxLayoutParams(),
					r = "horizontal" === this._orient ? [i, 7] : [7, i];
				E([0, 1], function(t) {
					u(a, t) && (o[n[t]] = a[t] * r[t])
				});
				var s = {
						width: e.getWidth(),
						height: e.getHeight()
					},
					l = this._rect = au(o, s);

				function u(t, e) {
					return null != t[e] && "auto" !== t[e]
				}
				E([0, 1], function(t) {
					u(a, t) || (a[t] = l[n[t]] / r[t])
				}), this._sw = a[0], this._sh = a[1]
			},
			dataToPoint: function(t, e) {
				k(t) && (t = t[0]), null == e && (e = !0);
				var i = this.getDateInfo(t),
					n = this._rangeInfo,
					a = i.formatedDate;
				if (e && !(i.time >= n.start.time && i.time < n.end.time + 864e5)) return [NaN, NaN];
				var o = i.day,
					r = this._getRangeInfo([n.start.time, a]).nthWeek;
				return "vertical" === this._orient ? [this._rect.x + o * this._sw + this._sw / 2, this._rect.y + r * this._sh +
					this._sh / 2
				] : [this._rect.x + r * this._sw + this._sw / 2, this._rect.y + o * this._sh + this._sh / 2]
			},
			pointToData: function(t) {
				var e = this.pointToDate(t);
				return e && e.time
			},
			dataToRect: function(t, e) {
				var i = this.dataToPoint(t, e);
				return {
					contentShape: {
						x: i[0] - (this._sw - this._lineWidth) / 2,
						y: i[1] - (this._sh - this._lineWidth) / 2,
						width: this._sw - this._lineWidth,
						height: this._sh - this._lineWidth
					},
					center: i,
					tl: [i[0] - this._sw / 2, i[1] - this._sh / 2],
					tr: [i[0] + this._sw / 2, i[1] - this._sh / 2],
					br: [i[0] + this._sw / 2, i[1] + this._sh / 2],
					bl: [i[0] - this._sw / 2, i[1] + this._sh / 2]
				}
			},
			pointToDate: function(t) {
				var e = Math.floor((t[0] - this._rect.x) / this._sw) + 1,
					i = Math.floor((t[1] - this._rect.y) / this._sh) + 1,
					n = this._rangeInfo.range;
				return "vertical" === this._orient ? this._getDateByWeeksAndDay(i, e - 1, n) : this._getDateByWeeksAndDay(e, i -
					1, n)
			},
			convertToPixel: A(cA, "dataToPoint"),
			convertFromPixel: A(cA, "pointToData"),
			_initRangeOption: function() {
				var t = this._model.get("range"),
					e = t;
				if (k(e) && 1 === e.length && (e = e[0]), /^\d{4}$/.test(e) && (t = [e + "-01-01", e + "-12-31"]),
					/^\d{4}[\/|-]\d{1,2}$/.test(e)) {
					var i = this.getDateInfo(e),
						n = i.date;
					n.setMonth(n.getMonth() + 1);
					var a = this.getNextNDay(n, -1);
					t = [i.formatedDate, a.formatedDate]
				}
				/^\d{4}[\/|-]\d{1,2}[\/|-]\d{1,2}$/.test(e) && (t = [e, e]);
				var o = this._getRangeInfo(t);
				return o.start.time > o.end.time && t.reverse(), t
			},
			_getRangeInfo: function(t) {
				var e;
				(t = [this.getDateInfo(t[0]), this.getDateInfo(t[1])])[0].time > t[1].time && (e = !0, t.reverse());
				var i = Math.floor(t[1].time / 864e5) - Math.floor(t[0].time / 864e5) + 1,
					n = new Date(t[0].time),
					a = n.getDate(),
					o = t[1].date.getDate();
				if (n.setDate(a + i - 1), n.getDate() !== o)
					for (var r = 0 < n.getTime() - t[1].time ? 1 : -1; n.getDate() !== o && 0 < (n.getTime() - t[1].time) * r;) i -=
						r, n.setDate(a + i - 1);
				var s = Math.floor((i + t[0].day + 6) / 7),
					l = e ? 1 - s : s - 1;
				return e && t.reverse(), {
					range: [t[0].formatedDate, t[1].formatedDate],
					start: t[0],
					end: t[1],
					allDay: i,
					weeks: s,
					nthWeek: l,
					fweek: t[0].day,
					lweek: t[1].day
				}
			},
			_getDateByWeeksAndDay: function(t, e, i) {
				var n = this._getRangeInfo(i);
				if (t > n.weeks || 0 === t && e < n.fweek || t === n.weeks && e > n.lweek) return !1;
				var a = 7 * (t - 1) - n.fweek + e,
					o = new Date(n.start.time);
				return o.setDate(n.start.d + a), this.getDateInfo(o)
			}
		}, hA.dimensions = hA.prototype.dimensions, hA.getDimensionsInfo = hA.prototype.getDimensionsInfo, hA.create =
		function(i, n) {
			var a = [];
			return i.eachComponent("calendar", function(t) {
				var e = new hA(t, i, n);
				a.push(e), t.coordinateSystem = e
			}), i.eachSeries(function(t) {
				"calendar" === t.get("coordinateSystem") && (t.coordinateSystem = a[t.get("calendarIndex") || 0])
			}), a
		}, Hu.register("calendar", hA);
	var dA = fu.extend({
		type: "calendar",
		coordinateSystem: null,
		defaultOption: {
			zlevel: 0,
			z: 2,
			left: 80,
			top: 60,
			cellSize: 20,
			orient: "horizontal",
			splitLine: {
				show: !0,
				lineStyle: {
					color: "#000",
					width: 1,
					type: "solid"
				}
			},
			itemStyle: {
				color: "#fff",
				borderWidth: 1,
				borderColor: "#ccc"
			},
			dayLabel: {
				show: !0,
				firstDay: 0,
				position: "start",
				margin: "50%",
				nameMap: "en",
				color: "#000"
			},
			monthLabel: {
				show: !0,
				position: "start",
				margin: 5,
				align: "center",
				nameMap: "en",
				formatter: null,
				color: "#000"
			},
			yearLabel: {
				show: !0,
				position: null,
				margin: 30,
				formatter: null,
				color: "#ccc",
				fontFamily: "sans-serif",
				fontWeight: "bolder",
				fontSize: 20
			}
		},
		init: function(t, e, i, n) {
			var a = su(t);
			dA.superApply(this, "init", arguments), fA(t, a)
		},
		mergeOption: function(t, e) {
			dA.superApply(this, "mergeOption", arguments), fA(this.option, t)
		}
	});

	function fA(t, e) {
		var i = t.cellSize;
		k(i) ? 1 === i.length && (i[1] = i[0]) : i = t.cellSize = [i, i];
		var n = N([0, 1], function(t) {
			return function(t, e) {
				return null != t[eu[e][0]] || null != t[eu[e][1]] && null != t[eu[e][2]]
			}(e, t) && (i[t] = "auto"), null != i[t] && "auto" !== i[t]
		});
		ru(t, e, {
			type: "box",
			ignoreSize: n
		})
	}
	var pA = {
			EN: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
			CN: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
		},
		gA = {
			EN: ["S", "M", "T", "W", "T", "F", "S"],
			CN: ["日", "一", "二", "三", "四", "五", "六"]
		};
	lf({
		type: "calendar",
		_tlpoints: null,
		_blpoints: null,
		_firstDayOfMonth: null,
		_firstDayPoints: null,
		render: function(t, e, i) {
			var n = this.group;
			n.removeAll();
			var a = t.coordinateSystem,
				o = a.getRangeInfo(),
				r = a.getOrient();
			this._renderDayRect(t, o, n), this._renderLines(t, o, r, n), this._renderYearText(t, o, r, n), this._renderMonthText(
				t, r, n), this._renderWeekText(t, o, r, n)
		},
		_renderDayRect: function(t, e, i) {
			for (var n = t.coordinateSystem, a = t.getModel("itemStyle").getItemStyle(), o = n.getCellWidth(), r = n.getCellHeight(),
					s = e.start.time; s <= e.end.time; s = n.getNextNDay(s, 1).time) {
				var l = n.dataToRect([s], !1).tl,
					u = new Hr({
						shape: {
							x: l[0],
							y: l[1],
							width: o,
							height: r
						},
						cursor: "default",
						style: a
					});
				i.add(u)
			}
		},
		_renderLines: function(i, t, n, a) {
			var o = this,
				r = i.coordinateSystem,
				s = i.getModel("splitLine.lineStyle").getLineStyle(),
				l = i.get("splitLine.show"),
				e = s.lineWidth;
			this._tlpoints = [], this._blpoints = [], this._firstDayOfMonth = [], this._firstDayPoints = [];
			for (var u = t.start, h = 0; u.time <= t.end.time; h++) {
				d(u.formatedDate), 0 === h && (u = r.getDateInfo(t.start.y + "-" + t.start.m));
				var c = u.date;
				c.setMonth(c.getMonth() + 1), u = r.getDateInfo(c)
			}

			function d(t) {
				o._firstDayOfMonth.push(r.getDateInfo(t)), o._firstDayPoints.push(r.dataToRect([t], !1).tl);
				var e = o._getLinePointsOfOneWeek(i, t, n);
				o._tlpoints.push(e[0]), o._blpoints.push(e[e.length - 1]), l && o._drawSplitline(e, s, a)
			}
			d(r.getNextNDay(t.end.time, 1).formatedDate), l && this._drawSplitline(o._getEdgesPoints(o._tlpoints, e, n), s,
				a), l && this._drawSplitline(o._getEdgesPoints(o._blpoints, e, n), s, a)
		},
		_getEdgesPoints: function(t, e, i) {
			var n = [t[0].slice(), t[t.length - 1].slice()],
				a = "horizontal" === i ? 0 : 1;
			return n[0][a] = n[0][a] - e / 2, n[1][a] = n[1][a] + e / 2, n
		},
		_drawSplitline: function(t, e, i) {
			var n = new zr({
				z2: 20,
				shape: {
					points: t
				},
				style: e
			});
			i.add(n)
		},
		_getLinePointsOfOneWeek: function(t, e, i) {
			var n = t.coordinateSystem;
			e = n.getDateInfo(e);
			for (var a = [], o = 0; o < 7; o++) {
				var r = n.getNextNDay(e.time, o),
					s = n.dataToRect([r.time], !1);
				a[2 * r.day] = s.tl, a[2 * r.day + 1] = s["horizontal" === i ? "bl" : "tr"]
			}
			return a
		},
		_formatterLabel: function(t, e) {
			return "string" == typeof t && t ? Xl(t, e) : "function" == typeof t ? t(e) : e.nameMap
		},
		_yearTextPositionControl: function(t, e, i, n, a) {
			e = e.slice();
			var o = ["center", "bottom"];
			"bottom" === n ? (e[1] += a, o = ["center", "top"]) : "left" === n ? e[0] -= a : "right" === n ? (e[0] += a, o = [
				"center", "top"
			]) : e[1] -= a;
			var r = 0;
			return "left" !== n && "right" !== n || (r = Math.PI / 2), {
				rotation: r,
				position: e,
				style: {
					textAlign: o[0],
					textVerticalAlign: o[1]
				}
			}
		},
		_renderYearText: function(t, e, i, n) {
			var a = t.getModel("yearLabel");
			if (a.get("show")) {
				var o = a.get("margin"),
					r = a.get("position");
				r = r || ("horizontal" !== i ? "top" : "left");
				var s = [this._tlpoints[this._tlpoints.length - 1], this._blpoints[0]],
					l = (s[0][0] + s[1][0]) / 2,
					u = (s[0][1] + s[1][1]) / 2,
					h = "horizontal" === i ? 0 : 1,
					c = {
						top: [l, s[h][1]],
						bottom: [l, s[1 - h][1]],
						left: [s[1 - h][0], u],
						right: [s[h][0], u]
					},
					d = e.start.y; + e.end.y > +e.start.y && (d = d + "-" + e.end.y);
				var f = a.get("formatter"),
					p = {
						start: e.start.y,
						end: e.end.y,
						nameMap: d
					},
					g = this._formatterLabel(f, p),
					m = new Dr({
						z2: 30
					});
				Gs(m.style, a, {
					text: g
				}), m.attr(this._yearTextPositionControl(m, c[r], i, r, o)), n.add(m)
			}
		},
		_monthTextPositionControl: function(t, e, i, n, a) {
			var o = "left",
				r = "top",
				s = t[0],
				l = t[1];
			return "horizontal" === i ? (l += a, e && (o = "center"), "start" === n && (r = "bottom")) : (s += a, e && (r =
				"middle"), "start" === n && (o = "right")), {
				x: s,
				y: l,
				textAlign: o,
				textVerticalAlign: r
			}
		},
		_renderMonthText: function(t, e, i) {
			var n = t.getModel("monthLabel");
			if (n.get("show")) {
				var a = n.get("nameMap"),
					o = n.get("margin"),
					r = n.get("position"),
					s = n.get("align"),
					l = [this._tlpoints, this._blpoints];
				R(a) && (a = pA[a.toUpperCase()] || []);
				var u = "start" === r ? 0 : 1,
					h = "horizontal" === e ? 0 : 1;
				o = "start" === r ? -o : o;
				for (var c = "center" === s, d = 0; d < l[u].length - 1; d++) {
					var f = l[u][d].slice(),
						p = this._firstDayOfMonth[d];
					if (c) {
						var g = this._firstDayPoints[d];
						f[h] = (g[h] + l[0][d + 1][h]) / 2
					}
					var m = n.get("formatter"),
						v = a[+p.m - 1],
						y = {
							yyyy: p.y,
							yy: (p.y + "").slice(2),
							MM: p.m,
							M: +p.m,
							nameMap: v
						},
						x = this._formatterLabel(m, y),
						_ = new Dr({
							z2: 30
						});
					L(Gs(_.style, n, {
						text: x
					}), this._monthTextPositionControl(f, c, e, r, o)), i.add(_)
				}
			}
		},
		_weekTextPositionControl: function(t, e, i, n, a) {
			var o = "center",
				r = "middle",
				s = t[0],
				l = t[1],
				u = "start" === i;
			return "horizontal" === e ? (s = s + n + (u ? 1 : -1) * a[0] / 2, o = u ? "right" : "left") : (l = l + n + (u ?
				1 : -1) * a[1] / 2, r = u ? "bottom" : "top"), {
				x: s,
				y: l,
				textAlign: o,
				textVerticalAlign: r
			}
		},
		_renderWeekText: function(t, e, i, n) {
			var a = t.getModel("dayLabel");
			if (a.get("show")) {
				var o = t.coordinateSystem,
					r = a.get("position"),
					s = a.get("nameMap"),
					l = a.get("margin"),
					u = o.getFirstDayOfWeek();
				R(s) && (s = gA[s.toUpperCase()] || []);
				var h = o.getNextNDay(e.end.time, 7 - e.lweek).time,
					c = [o.getCellWidth(), o.getCellHeight()];
				l = xl(l, c["horizontal" === i ? 0 : 1]), "start" === r && (h = o.getNextNDay(e.start.time, -(7 + e.fweek)).time,
					l = -l);
				for (var d = 0; d < 7; d++) {
					var f, p = o.getNextNDay(h, d),
						g = o.dataToRect([p.time], !1).center;
					f = Math.abs((d + u) % 7);
					var m = new Dr({
						z2: 30
					});
					L(Gs(m.style, a, {
						text: s[f]
					}), this._weekTextPositionControl(g, i, r, l, c)), n.add(m)
				}
			}
		}
	});
	var mA = {
		path: null,
		compoundPath: null,
		group: Si,
		image: Yn,
		text: Dr
	};
	Jd(function(t) {
		var e = t.graphic;
		k(e) ? e[0] && e[0].elements ? t.graphic = [t.graphic[0]] : t.graphic = [{
			elements: e
		}] : e && !e.elements && (t.graphic = [{
			elements: [e]
		}])
	});
	var vA = sf({
		type: "graphic",
		defaultOption: {
			elements: [],
			parentId: null
		},
		_elOptionsToUpdate: null,
		mergeOption: function(t) {
			var e = this.option.elements;
			this.option.elements = null, vA.superApply(this, "mergeOption", arguments), this.option.elements = e
		},
		optionUpdated: function(t, e) {
			var i = this.option,
				n = (e ? i : t).elements,
				a = i.elements = e ? [] : i.elements,
				o = [];
			this._flatten(n, o);
			var r = Ia(a, o);
			Aa(r);
			var s = this._elOptionsToUpdate = [];
			E(r, function(t, e) {
				var i = t.option;
				i && (s.push(i), function(t, e) {
					var i = t.exist;
					if (e.id = t.keyInfo.id, !e.type && i && (e.type = i.type), null == e.parentId) {
						var n = e.parentOption;
						n ? e.parentId = n.id : i && (e.parentId = i.parentId)
					}
					e.parentOption = null
				}(t, i), function(t, e, i) {
					var n = L({}, i),
						a = t[e],
						o = i.$action || "merge";
					"merge" === o ? a ? (m(a, n, !0), ru(a, n, {
						ignoreSize: !0
					}), lu(i, a)) : t[e] = n : "replace" === o ? t[e] = n : "remove" === o && a && (t[e] = null)
				}(a, e, i), function(t, e) {
					if (!t) return;
					t.hv = e.hv = [_A(e, ["left", "right"]), _A(e, ["top", "bottom"])], "group" === t.type && (null == t.width &&
						(t.width = e.width = 0), null == t.height && (t.height = e.height = 0))
				}(a[e], i))
			}, this);
			for (var l = a.length - 1; 0 <= l; l--) null == a[l] ? a.splice(l, 1) : delete a[l].$action
		},
		_flatten: function(t, i, n) {
			E(t, function(t) {
				if (t) {
					n && (t.parentOption = n), i.push(t);
					var e = t.children;
					"group" === t.type && e && this._flatten(e, i, t), delete t.children
				}
			}, this)
		},
		useElOptionsToUpdate: function() {
			var t = this._elOptionsToUpdate;
			return this._elOptionsToUpdate = null, t
		}
	});

	function yA(t, e, i, n) {
		var a = i.type,
			o = new(mA.hasOwnProperty(a) ? mA[a] : ps(a))(i);
		e.add(o), n.set(t, o), o.__ecGraphicId = t
	}

	function xA(t, e) {
		var i = t && t.parent;
		i && ("group" === t.type && t.traverse(function(t) {
			xA(t, e)
		}), e.removeKey(t.__ecGraphicId), i.remove(t))
	}

	function _A(e, t) {
		var i;
		return E(t, function(t) {
			null != e[t] && "auto" !== e[t] && (i = !0)
		}), i
	}
	lf({
		type: "graphic",
		init: function(t, e) {
			this._elMap = Q(), this._lastGraphicModel
		},
		render: function(t, e, i) {
			t !== this._lastGraphicModel && this._clear(), this._lastGraphicModel = t, this._updateElements(t), this._relocate(
				t, i)
		},
		_updateElements: function(u) {
			var t = u.useElOptionsToUpdate();
			if (t) {
				var h = this._elMap,
					c = this.group;
				E(t, function(t) {
					var e = t.$action,
						i = t.id,
						n = h.get(i),
						a = t.parentId,
						o = null != a ? h.get(a) : c,
						r = t.style;
					"text" === t.type && r && (t.hv && t.hv[1] && (r.textVerticalAlign = r.textBaseline = null), !r.hasOwnProperty(
						"textFill") && r.fill && (r.textFill = r.fill), !r.hasOwnProperty("textStroke") && r.stroke && (r.textStroke =
						r.stroke));
					var s = function(e) {
						return e = L({}, e), E(["id", "parentId", "$action", "hv", "bounding"].concat(tu), function(t) {
							delete e[t]
						}), e
					}(t);
					e && "merge" !== e ? "replace" === e ? (xA(n, h), yA(i, o, s, h)) : "remove" === e && xA(n, h) : n ? n.attr(
						s) : yA(i, o, s, h);
					var l = h.get(i);
					l && (l.__ecGraphicWidthOption = t.width, l.__ecGraphicHeightOption = t.height, function(t, e) {
						var i = t.eventData;
						t.silent || t.ignore || i || (i = t.eventData = {
							componentType: "graphic",
							componentIndex: e.componentIndex,
							name: t.name
						});
						i && (i.info = t.info)
					}(l, u))
				})
			}
		},
		_relocate: function(t, e) {
			for (var i = t.option.elements, n = this.group, a = this._elMap, o = e.getWidth(), r = e.getHeight(), s = 0; s <
				i.length; s++) {
				var l = i[s];
				if ((h = a.get(l.id)) && h.isGroup) {
					var u = (c = h.parent) === n;
					h.__ecGraphicWidth = xl(h.__ecGraphicWidthOption, u ? o : c.__ecGraphicWidth) || 0, h.__ecGraphicHeight = xl(h
						.__ecGraphicHeightOption, u ? r : c.__ecGraphicHeight) || 0
				}
			}
			for (s = i.length - 1; 0 <= s; s--) {
				var h, c;
				l = i[s];
				if (h = a.get(l.id)) ou(h, l, (c = h.parent) === n ? {
					width: o,
					height: r
				} : {
					width: c.__ecGraphicWidth,
					height: c.__ecGraphicHeight
				}, null, {
					hv: l.hv,
					boundingMode: l.bounding
				})
			}
		},
		_clear: function() {
			var e = this._elMap;
			e.each(function(t) {
				xA(t, e)
			}), this._elMap = Q()
		},
		dispose: function() {
			this._clear()
		}
	});
	var wA = {};

	function bA(t, e) {
		wA[t] = e
	}

	function SA(t) {
		return wA[t]
	}
	var MA = sf({
		type: "toolbox",
		layoutMode: {
			type: "box",
			ignoreSize: !0
		},
		optionUpdated: function() {
			MA.superApply(this, "optionUpdated", arguments), E(this.option.feature, function(t, e) {
				var i = SA(e);
				i && m(t, i.defaultOption)
			})
		},
		defaultOption: {
			show: !0,
			z: 6,
			zlevel: 0,
			orient: "horizontal",
			left: "right",
			top: "top",
			backgroundColor: "transparent",
			borderColor: "#ccc",
			borderRadius: 0,
			borderWidth: 0,
			padding: 5,
			itemSize: 15,
			itemGap: 8,
			showTitle: !0,
			iconStyle: {
				borderColor: "#666",
				color: "none"
			},
			emphasis: {
				iconStyle: {
					borderColor: "#3E98C5"
				}
			},
			tooltip: {
				show: !1
			}
		}
	});

	function IA(t, e) {
		var i = Vl(e.get("padding")),
			n = e.getItemStyle(["color", "opacity"]);
		return n.fill = e.get("backgroundColor"), t = new Hr({
			shape: {
				x: t.x - i[3],
				y: t.y - i[0],
				width: t.width + i[1] + i[3],
				height: t.height + i[0] + i[2],
				r: e.get("borderRadius")
			},
			style: n,
			silent: !0,
			z2: -1
		})
	}
	lf({
		type: "toolbox",
		render: function(h, c, d, s) {
			var f = this.group;
			if (f.removeAll(), h.get("show")) {
				var p = +h.get("itemSize"),
					l = h.get("feature") || {},
					u = this._features || (this._features = {}),
					g = [];
				E(l, function(t, e) {
						g.push(e)
					}), new df(this._featureNames || [], g).add(t).update(t).remove(A(t, null)).execute(), this._featureNames = g,
					function(t, e, i) {
						var n = e.getBoxLayoutParams(),
							a = e.get("padding"),
							o = {
								width: i.getWidth(),
								height: i.getHeight()
							},
							r = au(n, o, a);
						nu(e.get("orient"), t, e.get("itemGap"), r.width, r.height), ou(t, n, o, a)
					}(f, h, d), f.add(IA(f.getBoundingRect(), h)), f.eachChild(function(t) {
						var e = t.__title,
							i = t.hoverStyle;
						if (i && e) {
							var n = un(e, wn(i)),
								a = t.position[0] + f.position[0],
								o = !1;
							t.position[1] + f.position[1] + p + n.height > d.getHeight() && (i.textPosition = "top", o = !0);
							var r = o ? -5 - n.height : p + 8;
							a + n.width / 2 > d.getWidth() ? (i.textPosition = ["100%", r], i.textAlign = "right") : a - n.width / 2 <
								0 && (i.textPosition = [0, r], i.textAlign = "left")
						}
					})
			}

			function t(t, e) {
				var i, n = g[t],
					a = g[e],
					o = new dl(l[n], h, h.ecModel);
				if (n && !a) {
					if (function(t) {
							return 0 === t.indexOf("my")
						}(n)) i = {
						model: o,
						onclick: o.option.onclick,
						featureName: n
					};
					else {
						var r = SA(n);
						if (!r) return;
						i = new r(o, c, d)
					}
					u[n] = i
				} else {
					if (!(i = u[a])) return;
					i.model = o, i.ecModel = c, i.api = d
				}
				n || !a ? o.get("show") && !i.unusable ? (function(a, o, t) {
					var r = a.getModel("iconStyle"),
						s = a.getModel("emphasis.iconStyle"),
						e = o.getIcons ? o.getIcons() : a.get("icon"),
						l = a.get("title") || {};
					if ("string" == typeof e) {
						var i = e,
							n = l;
						l = {}, (e = {})[t] = i, l[t] = n
					}
					var u = a.iconPaths = {};
					E(e, function(t, e) {
						var i = el(t, {}, {
							x: -p / 2,
							y: -p / 2,
							width: p,
							height: p
						});
						i.setStyle(r.getItemStyle()), i.hoverStyle = s.getItemStyle(), i.setStyle({
							text: l[e],
							textAlign: s.get("textAlign"),
							textBorderRadius: s.get("textBorderRadius"),
							textPadding: s.get("textPadding"),
							textFill: null
						});
						var n = h.getModel("tooltip");
						n && n.get("show") && i.attr("tooltip", L({
								content: l[e],
								formatter: n.get("formatter", !0) || function() {
									return l[e]
								},
								formatterParams: {
									componentType: "toolbox",
									name: e,
									title: l[e],
									$vars: ["name", "title"]
								},
								position: n.get("position", !0) || "bottom"
							}, n.option)), Os(i), h.get("showTitle") && (i.__title = l[e], i.on("mouseover", function() {
								var t = s.getItemStyle(),
									e = "vertical" === h.get("orient") ? null == h.get("right") ? "right" : "left" : null == h.get(
										"bottom") ? "bottom" : "top";
								i.setStyle({
									textFill: s.get("textFill") || t.fill || t.stroke || "#000",
									textBackgroundColor: s.get("textBackgroundColor"),
									textPosition: s.get("textPosition") || e
								})
							}).on("mouseout", function() {
								i.setStyle({
									textFill: null,
									textBackgroundColor: null
								})
							})), i.trigger(a.get("iconStatus." + e) || "normal"), f.add(i), i.on("click", T(o.onclick, o, c, d, e)),
							u[e] = i
					})
				}(o, i, n), o.setIconStatus = function(t, e) {
					var i = this.option,
						n = this.iconPaths;
					i.iconStatus = i.iconStatus || {}, i.iconStatus[t] = e, n[t] && n[t].trigger(e)
				}, i.render && i.render(o, c, d, s)) : i.remove && i.remove(c, d) : i.dispose && i.dispose(c, d)
			}
		},
		updateView: function(t, e, i, n) {
			E(this._features, function(t) {
				t.updateView && t.updateView(t.model, e, i, n)
			})
		},
		remove: function(e, i) {
			E(this._features, function(t) {
				t.remove && t.remove(e, i)
			}), this.group.removeAll()
		},
		dispose: function(e, i) {
			E(this._features, function(t) {
				t.dispose && t.dispose(e, i)
			})
		}
	});
	var AA = gc.toolbox.saveAsImage;

	function TA(t) {
		this.model = t
	}
	TA.defaultOption = {
		show: !0,
		icon: "M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",
		title: AA.title,
		type: "png",
		connectedBackgroundColor: "#fff",
		name: "",
		excludeComponents: ["toolbox"],
		pixelRatio: 1,
		lang: AA.lang.slice()
	}, TA.prototype.unusable = !v.canvasSupported, TA.prototype.onclick = function(t, e) {
		var i = this.model,
			n = i.get("name") || t.get("title.0.text") || "echarts",
			a = i.get("type", !0) || "png",
			o = e.getConnectedDataURL({
				type: a,
				backgroundColor: i.get("backgroundColor", !0) || t.get("backgroundColor") || "#fff",
				connectedBackgroundColor: i.get("connectedBackgroundColor"),
				excludeComponents: i.get("excludeComponents"),
				pixelRatio: i.get("pixelRatio")
			});
		if ("function" != typeof MouseEvent || v.browser.ie || v.browser.edge)
			if (window.navigator.msSaveOrOpenBlob) {
				for (var r = atob(o.split(",")[1]), s = r.length, l = new Uint8Array(s); s--;) l[s] = r.charCodeAt(s);
				var u = new Blob([l]);
				window.navigator.msSaveOrOpenBlob(u, n + "." + a)
			} else {
				var h = i.get("lang"),
					c = '<body style="margin:0;"><img src="' + o + '" style="max-width:100%;" title="' + (h && h[0] || "") +
					'" /></body>';
				window.open().document.write(c)
			}
		else {
			var d = document.createElement("a");
			d.download = n + "." + a, d.target = "_blank", d.href = o;
			var f = new MouseEvent("click", {
				view: window,
				bubbles: !0,
				cancelable: !1
			});
			d.dispatchEvent(f)
		}
	}, bA("saveAsImage", TA);
	var DA = gc.toolbox.magicType;

	function CA(t) {
		this.model = t
	}
	CA.defaultOption = {
		show: !0,
		type: [],
		icon: {
			line: "M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",
			bar: "M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",
			stack: "M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z",
			tiled: "M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z"
		},
		title: D(DA.title),
		option: {},
		seriesIndex: {}
	};
	var LA = CA.prototype;
	LA.getIcons = function() {
		var t = this.model,
			e = t.get("icon"),
			i = {};
		return E(t.get("type"), function(t) {
			e[t] && (i[t] = e[t])
		}), i
	};
	var kA = {
			line: function(t, e, i, n) {
				if ("bar" === t) return m({
					id: e,
					type: "line",
					data: i.get("data"),
					stack: i.get("stack"),
					markPoint: i.get("markPoint"),
					markLine: i.get("markLine")
				}, n.get("option.line") || {}, !0)
			},
			bar: function(t, e, i, n) {
				if ("line" === t) return m({
					id: e,
					type: "bar",
					data: i.get("data"),
					stack: i.get("stack"),
					markPoint: i.get("markPoint"),
					markLine: i.get("markLine")
				}, n.get("option.bar") || {}, !0)
			},
			stack: function(t, e, i, n) {
				if ("line" === t || "bar" === t) return m({
					id: e,
					stack: "__ec_magicType_stack__"
				}, n.get("option.stack") || {}, !0)
			},
			tiled: function(t, e, i, n) {
				if ("line" === t || "bar" === t) return m({
					id: e,
					stack: ""
				}, n.get("option.tiled") || {}, !0)
			}
		},
		PA = [
			["line", "bar"],
			["stack", "tiled"]
		];
	LA.onclick = function(u, t, h) {
		var c = this.model,
			e = c.get("seriesIndex." + h);
		if (kA[h]) {
			var d = {
				series: []
			};
			E(PA, function(t) {
				0 <= _(t, h) && E(t, function(t) {
					c.setIconStatus(t, "normal")
				})
			}), c.setIconStatus(h, "emphasis"), u.eachComponent({
				mainType: "series",
				query: null == e ? null : {
					seriesIndex: e
				}
			}, function(t) {
				var e = t.subType,
					i = t.id,
					n = kA[h](e, i, t, c);
				n && (C(n, t.option), d.series.push(n));
				var a = t.coordinateSystem;
				if (a && "cartesian2d" === a.type && ("line" === h || "bar" === h)) {
					var o = a.getAxesByScale("ordinal")[0];
					if (o) {
						var r = o.dim + "Axis",
							s = u.queryComponents({
								mainType: r,
								index: t.get(name + "Index"),
								id: t.get(name + "Id")
							})[0].componentIndex;
						d[r] = d[r] || [];
						for (var l = 0; l <= s; l++) d[r][s] = d[r][s] || {};
						d[r][s].boundaryGap = "bar" === h
					}
				}
			}), t.dispatchAction({
				type: "changeMagicType",
				currentType: h,
				newOption: d
			})
		}
	}, tf({
		type: "changeMagicType",
		event: "magicTypeChanged",
		update: "prepareAndUpdate"
	}, function(t, e) {
		e.mergeOption(t.newOption)
	}), bA("magicType", CA);
	var NA = gc.toolbox.dataView,
		OA = new Array(60).join("-"),
		EA = "\t";

	function RA(t) {
		var e = function(t) {
			var a = {},
				o = [],
				r = [];
			return t.eachRawSeries(function(t) {
				var e = t.coordinateSystem;
				if (!e || "cartesian2d" !== e.type && "polar" !== e.type) o.push(t);
				else {
					var i = e.getBaseAxis();
					if ("category" === i.type) {
						var n = i.dim + "_" + i.index;
						a[n] || (a[n] = {
							categoryAxis: i,
							valueAxis: e.getOtherAxis(i),
							series: []
						}, r.push({
							axisDim: i.dim,
							axisIndex: i.index
						})), a[n].series.push(t)
					} else o.push(t)
				}
			}), {
				seriesGroupByCategoryAxis: a,
				other: o,
				meta: r
			}
		}(t);
		return {
			value: M([function(t) {
				var h = [];
				return E(t, function(t, e) {
					var i = t.categoryAxis,
						n = t.valueAxis.dim,
						a = [" "].concat(N(t.series, function(t) {
							return t.name
						})),
						o = [i.model.getCategories()];
					E(t.series, function(t) {
						o.push(t.getRawData().mapArray(n, function(t) {
							return t
						}))
					});
					for (var r = [a.join(EA)], s = 0; s < o[0].length; s++) {
						for (var l = [], u = 0; u < o.length; u++) l.push(o[u][s]);
						r.push(l.join(EA))
					}
					h.push(r.join("\n"))
				}), h.join("\n\n" + OA + "\n\n")
			}(e.seriesGroupByCategoryAxis), function(t) {
				return N(t, function(t) {
					var a = t.getRawData(),
						o = [t.name],
						r = [];
					return a.each(a.dimensions, function() {
						for (var t = arguments.length, e = arguments[t - 1], i = a.getName(e), n = 0; n < t - 1; n++) r[n] =
							arguments[n];
						o.push((i ? i + EA : "") + r.join(EA))
					}), o.join("\n")
				}).join("\n\n" + OA + "\n\n")
			}(e.other)], function(t) {
				return t.replace(/[\n\t\s]/g, "")
			}).join("\n\n" + OA + "\n\n"),
			meta: e.meta
		}
	}

	function zA(t) {
		return t.replace(/^\s\s*/, "").replace(/\s\s*$/, "")
	}
	var BA = new RegExp("[" + EA + "]+", "g");

	function VA(t, o) {
		var e = t.split(new RegExp("\n*" + OA + "\n*", "g")),
			r = {
				series: []
			};
		return E(e, function(t, e) {
			if (function(t) {
					if (0 <= t.slice(0, t.indexOf("\n")).indexOf(EA)) return !0
				}(t)) {
				var i = function(t) {
						for (var e = t.split(/\n+/g), i = [], n = N(zA(e.shift()).split(BA), function(t) {
								return {
									name: t,
									data: []
								}
							}), a = 0; a < e.length; a++) {
							var o = zA(e[a]).split(BA);
							i.push(o.shift());
							for (var r = 0; r < o.length; r++) n[r] && (n[r].data[a] = o[r])
						}
						return {
							series: n,
							categories: i
						}
					}(t),
					n = o[e],
					a = n.axisDim + "Axis";
				n && (r[a] = r[a] || [], r[a][n.axisIndex] = {
					data: i.categories
				}, r.series = r.series.concat(i.series))
			} else {
				i = function(t) {
					for (var e = t.split(/\n+/g), i = zA(e.shift()), n = [], a = 0; a < e.length; a++) {
						var o, r = zA(e[a]).split(BA),
							s = "",
							l = !1;
						o = isNaN(r[0]) ? (l = !0, s = r[0], r = r.slice(1), n[a] = {
							name: s,
							value: []
						}, n[a].value) : n[a] = [];
						for (var u = 0; u < r.length; u++) o.push(+r[u]);
						1 === o.length && (l ? n[a].value = o[0] : n[a] = o[0])
					}
					return {
						name: i,
						data: n
					}
				}(t);
				r.series.push(i)
			}
		}), r
	}

	function GA(t) {
		this._dom = null, this.model = t
	}
	GA.defaultOption = {
		show: !0,
		readOnly: !1,
		optionToContent: null,
		contentToOption: null,
		icon: "M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28",
		title: D(NA.title),
		lang: D(NA.lang),
		backgroundColor: "#fff",
		textColor: "#000",
		textareaColor: "#fff",
		textareaBorderColor: "#333",
		buttonColor: "#c23531",
		buttonTextColor: "#fff"
	}, GA.prototype.onclick = function(t, e) {
		var i = e.getDom(),
			n = this.model;
		this._dom && i.removeChild(this._dom);
		var a = document.createElement("div");
		a.style.cssText = "position:absolute;left:5px;top:5px;bottom:5px;right:5px;", a.style.backgroundColor = n.get(
			"backgroundColor") || "#fff";
		var o = document.createElement("h4"),
			r = n.get("lang") || [];
		o.innerHTML = r[0] || n.get("title"), o.style.cssText = "margin: 10px 20px;", o.style.color = n.get("textColor");
		var s = document.createElement("div"),
			l = document.createElement("textarea");
		s.style.cssText = "display:block;width:100%;overflow:auto;";
		var u = n.get("optionToContent"),
			h = n.get("contentToOption"),
			c = RA(t);
		if ("function" == typeof u) {
			var d = u(e.getOption());
			"string" == typeof d ? s.innerHTML = d : G(d) && s.appendChild(d)
		} else s.appendChild(l), l.readOnly = n.get("readOnly"), l.style.cssText =
			"width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;", l.style.color = n.get(
				"textColor"), l.style.borderColor = n.get("textareaBorderColor"), l.style.backgroundColor = n.get("textareaColor"),
			l.value = c.value;
		var f = c.meta,
			p = document.createElement("div");
		p.style.cssText = "position:absolute;bottom:0;left:0;right:0;";
		var g = "float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px",
			m = document.createElement("div"),
			v = document.createElement("div");
		g += ";background-color:" + n.get("buttonColor"), g += ";color:" + n.get("buttonTextColor");
		var y = this;

		function x() {
			i.removeChild(a), y._dom = null
		}
		Gt(m, "click", x), Gt(v, "click", function() {
				var t;
				try {
					t = "function" == typeof h ? h(s, e.getOption()) : VA(l.value, f)
				} catch (t) {
					throw x(), new Error("Data view format error " + t)
				}
				t && e.dispatchAction({
					type: "changeDataView",
					newOption: t
				}), x()
			}), m.innerHTML = r[1], v.innerHTML = r[2], v.style.cssText = g, m.style.cssText = g, n.get("readOnly") || p.appendChild(
				v), p.appendChild(m), a.appendChild(o), a.appendChild(s), a.appendChild(p), s.style.height = i.clientHeight - 80 +
			"px", i.appendChild(a), this._dom = a
	}, GA.prototype.remove = function(t, e) {
		this._dom && e.getDom().removeChild(this._dom)
	}, GA.prototype.dispose = function(t, e) {
		this.remove(t, e)
	}, bA("dataView", GA), tf({
		type: "changeDataView",
		event: "dataViewChanged",
		update: "prepareAndUpdate"
	}, function(t, n) {
		var a = [];
		E(t.newOption.series, function(t) {
			var e = n.getSeriesByName(t.name)[0];
			if (e) {
				var i = e.get("data");
				a.push({
					name: t.name,
					data: function(t, n) {
						return N(t, function(t, e) {
							var i = n && n[e];
							return z(i) && !k(i) ? (z(t) && !k(t) && (t = t.value), C({
								value: t
							}, i)) : t
						})
					}(t.data, i)
				})
			} else a.push(L({
				type: "scatter"
			}, t))
		}), n.mergeOption(C({
			series: a
		}, t.newOption))
	});
	var FA = E,
		WA = _,
		HA = A,
		ZA = ["dataToPoint", "pointToData"],
		UA = ["grid", "xAxis", "yAxis", "geo", "graph", "polar", "radiusAxis", "angleAxis", "bmap"];

	function XA(t, e, i) {
		var n = this._targetInfoList = [],
			a = {},
			o = qA(e, t);
		FA(KA, function(t, e) {
			i && i.include && !(0 <= WA(i.include, e)) || t(o, n, a)
		})
	}
	var YA = XA.prototype;

	function jA(t) {
		return t[0] > t[1] && t.reverse(), t
	}

	function qA(t, e) {
		return Pa(t, e, {
			includeMainTypes: UA
		})
	}
	YA.setOutputRanges = function(t, e) {
		this.matchOutputRanges(t, e, function(t, e, i) {
			if ((t.coordRanges || (t.coordRanges = [])).push(e), !t.coordRange) {
				t.coordRange = e;
				var n = QA[t.brushType](0, i, e);
				t.__rangeOffset = {
					offset: eT[t.brushType](n.values, t.range, [1, 1]),
					xyMinMax: n.xyMinMax
				}
			}
		})
	}, YA.matchOutputRanges = function(t, n, a) {
		FA(t, function(i) {
			var t = this.findTargetInfo(i, n);
			t && !0 !== t && E(t.coordSyses, function(t) {
				var e = QA[i.brushType](1, t, i.range);
				a(i, e.values, t, n)
			})
		}, this)
	}, YA.setInputRanges = function(t, a) {
		FA(t, function(t) {
			var e = this.findTargetInfo(t, a);
			if (t.range = t.range || [], e && !0 !== e) {
				t.panelId = e.panelId;
				var i = QA[t.brushType](0, e.coordSys, t.coordRange),
					n = t.__rangeOffset;
				t.range = n ? eT[t.brushType](i.values, n.offset, function(t, e) {
					var i = nT(t),
						n = nT(e),
						a = [i[0] / n[0], i[1] / n[1]];
					return isNaN(a[0]) && (a[0] = 1), isNaN(a[1]) && (a[1] = 1), a
				}(i.xyMinMax, n.xyMinMax)) : i.values
			}
		}, this)
	}, YA.makePanelOpts = function(i, n) {
		return N(this._targetInfoList, function(t) {
			var e = t.getPanelRect();
			return {
				panelId: t.panelId,
				defaultBrushType: n && n(t),
				clipPath: Mb(e),
				isTargetByCursor: Ab(e, i, t.coordSysModel),
				getLinearBrushOtherExtent: Ib(e)
			}
		})
	}, YA.controlSeries = function(t, e, i) {
		var n = this.findTargetInfo(t, i);
		return !0 === n || n && 0 <= WA(n.coordSyses, e.coordinateSystem)
	}, YA.findTargetInfo = function(t, e) {
		for (var i = this._targetInfoList, n = qA(e, t), a = 0; a < i.length; a++) {
			var o = i[a],
				r = t.panelId;
			if (r) {
				if (o.panelId === r) return o
			} else
				for (a = 0; a < $A.length; a++)
					if ($A[a](n, o)) return o
		}
		return !0
	};
	var KA = {
			grid: function(t, n) {
				var a = t.xAxisModels,
					o = t.yAxisModels,
					e = t.gridModels,
					i = Q(),
					r = {},
					s = {};
				(a || o || e) && (FA(a, function(t) {
					var e = t.axis.grid.model;
					i.set(e.id, e), r[e.id] = !0
				}), FA(o, function(t) {
					var e = t.axis.grid.model;
					i.set(e.id, e), s[e.id] = !0
				}), FA(e, function(t) {
					i.set(t.id, t), r[t.id] = !0, s[t.id] = !0
				}), i.each(function(t) {
					var e = t.coordinateSystem,
						i = [];
					FA(e.getCartesians(), function(t, e) {
						(0 <= WA(a, t.getAxis("x").model) || 0 <= WA(o, t.getAxis("y").model)) && i.push(t)
					}), n.push({
						panelId: "grid--" + t.id,
						gridModel: t,
						coordSysModel: t,
						coordSys: i[0],
						coordSyses: i,
						getPanelRect: JA.grid,
						xAxisDeclared: r[t.id],
						yAxisDeclared: s[t.id]
					})
				}))
			},
			geo: function(t, i) {
				FA(t.geoModels, function(t) {
					var e = t.coordinateSystem;
					i.push({
						panelId: "geo--" + t.id,
						geoModel: t,
						coordSysModel: t,
						coordSys: e,
						coordSyses: [e],
						getPanelRect: JA.geo
					})
				})
			}
		},
		$A = [function(t, e) {
			var i = t.xAxisModel,
				n = t.yAxisModel,
				a = t.gridModel;
			return !a && i && (a = i.axis.grid.model), !a && n && (a = n.axis.grid.model), a && a === e.gridModel
		}, function(t, e) {
			var i = t.geoModel;
			return i && i === e.geoModel
		}],
		JA = {
			grid: function() {
				return this.coordSys.grid.getRect().clone()
			},
			geo: function() {
				var t = this.coordSys,
					e = t.getBoundingRect().clone();
				return e.applyTransform(Ks(t)), e
			}
		},
		QA = {
			lineX: HA(tT, 0),
			lineY: HA(tT, 1),
			rect: function(t, e, i) {
				var n = e[ZA[t]]([i[0][0], i[1][0]]),
					a = e[ZA[t]]([i[0][1], i[1][1]]),
					o = [jA([n[0], a[0]]), jA([n[1], a[1]])];
				return {
					values: o,
					xyMinMax: o
				}
			},
			polygon: function(i, n, t) {
				var a = [
					[1 / 0, -1 / 0],
					[1 / 0, -1 / 0]
				];
				return {
					values: N(t, function(t) {
						var e = n[ZA[i]](t);
						return a[0][0] = Math.min(a[0][0], e[0]), a[1][0] = Math.min(a[1][0], e[1]), a[0][1] = Math.max(a[0][1], e[0]),
							a[1][1] = Math.max(a[1][1], e[1]), e
					}),
					xyMinMax: a
				}
			}
		};

	function tT(t, e, i, n) {
		var a = i.getAxis(["x", "y"][t]),
			o = jA(N([0, 1], function(t) {
				return e ? a.coordToData(a.toLocalCoord(n[t])) : a.toGlobalCoord(a.dataToCoord(n[t]))
			})),
			r = [];
		return r[t] = o, r[1 - t] = [NaN, NaN], {
			values: o,
			xyMinMax: r
		}
	}
	var eT = {
		lineX: HA(iT, 0),
		lineY: HA(iT, 1),
		rect: function(t, e, i) {
			return [
				[t[0][0] - i[0] * e[0][0], t[0][1] - i[0] * e[0][1]],
				[t[1][0] - i[1] * e[1][0], t[1][1] - i[1] * e[1][1]]
			]
		},
		polygon: function(t, i, n) {
			return N(t, function(t, e) {
				return [t[0] - n[0] * i[e][0], t[1] - n[1] * i[e][1]]
			})
		}
	};

	function iT(t, e, i, n) {
		return [e[0] - n[t] * i[0], e[1] - n[t] * i[1]]
	}

	function nT(t) {
		return t ? [t[0][1] - t[0][0], t[1][1] - t[1][0]] : [NaN, NaN]
	}
	var aT = E,
		oT = "\0_ec_hist_store";

	function rT(t) {
		var e = t[oT];
		return e = e || (t[oT] = [{}])
	}
	fu.registerSubTypeDefaulter("dataZoom", function() {
		return "slider"
	});
	var sT = ["cartesian2d", "polar", "singleAxis"];
	var lT, uT, hT, cT, dT = (uT = ["axisIndex", "axis", "index", "id"], hT = N(lT = (lT = ["x", "y", "z", "radius",
		"angle", "single"
	]).slice(), Kl), cT = N(uT = (uT || []).slice(), Kl), function(a, o) {
		E(lT, function(t, e) {
			for (var i = {
					name: t,
					capital: hT[e]
				}, n = 0; n < uT.length; n++) i[uT[n]] = t + cT[n];
			a.call(o, i)
		})
	});

	function fT(a, o, r) {
		return function(t) {
			var e, i = {
				nodes: [],
				records: {}
			};
			if (o(function(t) {
					i.records[t.name] = {}
				}), !t) return i;
			for (s(t, i); e = !1, a(n), e;);

			function n(t) {
				! function(t, e) {
					return 0 <= _(e.nodes, t)
				}(t, i) && function(t, i) {
					var n = !1;
					return o(function(e) {
						E(r(t, e) || [], function(t) {
							i.records[e.name][t] && (n = !0)
						})
					}), n
				}(t, i) && (s(t, i), e = !0)
			}
			return i
		};

		function s(t, i) {
			i.nodes.push(t), o(function(e) {
				E(r(t, e) || [], function(t) {
					i.records[e.name][t] = !0
				})
			})
		}
	}

	function pT(t, e, i, n) {
		this._dimName = t, this._axisIndex = e, this._valueWindow, this._percentWindow, this._dataExtent, this._minMaxSpan,
			this.ecModel = n, this._dataZoomModel = i
	}
	var gT = E,
		mT = wl;

	function vT(t, e) {
		var i = t.getAxisModel(),
			n = t._percentWindow,
			a = t._valueWindow;
		if (n) {
			var o = Ml(a, [0, 500]);
			o = Math.min(o, 20);
			var r = e || 0 === n[0] && 100 === n[1];
			i.setRange(r ? null : +a[0].toFixed(o), r ? null : +a[1].toFixed(o))
		}
	}
	pT.prototype = {
		constructor: pT,
		hostedBy: function(t) {
			return this._dataZoomModel === t
		},
		getDataValueWindow: function() {
			return this._valueWindow.slice()
		},
		getDataPercentWindow: function() {
			return this._percentWindow.slice()
		},
		getTargetSeriesModels: function() {
			var n = [],
				a = this.ecModel;
			return a.eachSeries(function(t) {
				if (function(t) {
						return 0 <= _(sT, t)
					}(t.get("coordinateSystem"))) {
					var e = this._dimName,
						i = a.queryComponents({
							mainType: e + "Axis",
							index: t.get(e + "AxisIndex"),
							id: t.get(e + "AxisId")
						})[0];
					this._axisIndex === (i && i.componentIndex) && n.push(t)
				}
			}, this), n
		},
		getAxisModel: function() {
			return this.ecModel.getComponent(this._dimName + "Axis", this._axisIndex)
		},
		getOtherAxisModel: function() {
			var t, e, i, n = this._dimName,
				a = this.ecModel,
				o = this.getAxisModel();
			return t = "x" === n || "y" === n ? (e = "gridIndex", "x" === n ? "y" : "x") : (e = "polarIndex", "angle" === n ?
				"radius" : "angle"), a.eachComponent(t + "Axis", function(t) {
				(t.get(e) || 0) === (o.get(e) || 0) && (i = t)
			}), i
		},
		getMinMaxSpan: function() {
			return D(this._minMaxSpan)
		},
		calculateDataWindow: function(a) {
			var o, r = this._dataExtent,
				s = this.getAxisModel().axis.scale,
				l = this._dataZoomModel.getRangePropMode(),
				u = [0, 100],
				h = [],
				c = [];
			gT(["start", "end"], function(t, e) {
				var i = a[t],
					n = a[t + "Value"];
				"percent" === l[e] ? (null == i && (i = u[e]), n = s.parse(yl(i, u, r))) : (o = !0, i = yl(n = null == n ? r[e] :
					s.parse(n), r, u)), c[e] = n, h[e] = i
			}), mT(c), mT(h);
			var d = this._minMaxSpan;

			function t(t, e, i, n, a) {
				var o = a ? "Span" : "ValueSpan";
				ww(0, t, i, "all", d["min" + o], d["max" + o]);
				for (var r = 0; r < 2; r++) e[r] = yl(t[r], i, n, !0), a && (e[r] = s.parse(e[r]))
			}
			return o ? t(c, h, r, u, !1) : t(h, c, u, r, !0), {
				valueWindow: c,
				percentWindow: h
			}
		},
		reset: function(t) {
			if (t === this._dataZoomModel) {
				var e = this.getTargetSeriesModels();
				this._dataExtent = function(t, e, i) {
						var n = [1 / 0, -1 / 0];
						gT(i, function(t) {
							var i = t.getData();
							i && gT(i.mapDimension(e, !0), function(t) {
								var e = i.getApproximateExtent(t);
								e[0] < n[0] && (n[0] = e[0]), e[1] > n[1] && (n[1] = e[1])
							})
						}), n[1] < n[0] && (n = [NaN, NaN]);
						return function(t, e) {
							var i = t.getAxisModel(),
								n = i.getMin(!0),
								a = "category" === i.get("type"),
								o = a && i.getCategories().length;
							null != n && "dataMin" !== n && "function" != typeof n ? e[0] = n : a && (e[0] = 0 < o ? 0 : NaN);
							var r = i.getMax(!0);
							null != r && "dataMax" !== r && "function" != typeof r ? e[1] = r : a && (e[1] = 0 < o ? o - 1 : NaN);
							i.get("scale", !0) || (0 < e[0] && (e[0] = 0), e[1] < 0 && (e[1] = 0))
						}(t, n), n
					}(this, this._dimName, e),
					function(n) {
						var a = n._minMaxSpan = {},
							o = n._dataZoomModel,
							r = n._dataExtent;
						gT(["min", "max"], function(t) {
							var e = o.get(t + "Span"),
								i = o.get(t + "ValueSpan");
							null != i && (i = n.getAxisModel().axis.scale.parse(i)), null != i ? e = yl(r[0] + i, r, [0, 100], !0) :
								null != e && (i = yl(e, [0, 100], r, !0) - r[0]), a[t + "Span"] = e, a[t + "ValueSpan"] = i
						})
					}(this);
				var i = this.calculateDataWindow(t.settledOption);
				this._valueWindow = i.valueWindow, this._percentWindow = i.percentWindow, vT(this)
			}
		},
		restore: function(t) {
			t === this._dataZoomModel && (this._valueWindow = this._percentWindow = null, vT(this, !0))
		},
		filterData: function(t, e) {
			if (t === this._dataZoomModel) {
				var n = this._dimName,
					i = this.getTargetSeriesModels(),
					a = t.get("filterMode"),
					c = this._valueWindow;
				"none" !== a && gT(i, function(i) {
					var u = i.getData(),
						h = u.mapDimension(n, !0);
					h.length && ("weakFilter" === a ? u.filterSelf(function(t) {
						for (var e, i, n, a = 0; a < h.length; a++) {
							var o = u.get(h[a], t),
								r = !isNaN(o),
								s = o < c[0],
								l = o > c[1];
							if (r && !s && !l) return !0;
							r && (n = !0), s && (e = !0), l && (i = !0)
						}
						return n && e && i
					}) : gT(h, function(t) {
						if ("empty" === a) i.setData(u = u.map(t, function(t) {
							return function(t) {
								return t >= c[0] && t <= c[1]
							}(t) ? t : NaN
						}));
						else {
							var e = {};
							e[t] = c, u.selectRange(e)
						}
					}), gT(h, function(t) {
						u.setApproximateExtent(c, t)
					}))
				})
			}
		}
	};
	var yT = E,
		xT = dT,
		_T = sf({
			type: "dataZoom",
			dependencies: ["xAxis", "yAxis", "zAxis", "radiusAxis", "angleAxis", "singleAxis", "series"],
			defaultOption: {
				zlevel: 0,
				z: 4,
				orient: null,
				xAxisIndex: null,
				yAxisIndex: null,
				filterMode: "filter",
				throttle: null,
				start: 0,
				end: 100,
				startValue: null,
				endValue: null,
				minSpan: null,
				maxSpan: null,
				minValueSpan: null,
				maxValueSpan: null,
				rangeMode: null
			},
			init: function(t, e, i) {
				this._dataIntervalByAxis = {}, this._dataInfo = {}, this._axisProxies = {}, this.textStyleModel, this._autoThrottle = !
					0, this._rangePropMode = ["percent", "percent"];
				var n = wT(t);
				this.settledOption = n, this.mergeDefaultAndTheme(t, i), this.doInit(n)
			},
			mergeOption: function(t) {
				var e = wT(t);
				m(this.option, t, !0), m(this.settledOption, e, !0), this.doInit(e)
			},
			doInit: function(t) {
				var i = this.option;
				v.canvasSupported || (i.realtime = !1), this._setDefaultThrottle(t), bT(this, t);
				var n = this.settledOption;
				yT([
					["start", "startValue"],
					["end", "endValue"]
				], function(t, e) {
					"value" === this._rangePropMode[e] && (i[t[0]] = n[t[0]] = null)
				}, this), this.textStyleModel = this.getModel("textStyle"), this._resetTarget(), this._giveAxisProxies()
			},
			_giveAxisProxies: function() {
				var r = this._axisProxies;
				this.eachTargetAxis(function(t, e, i, n) {
					var a = this.dependentModels[t.axis][e],
						o = a.__dzAxisProxy || (a.__dzAxisProxy = new pT(t.name, e, this, n));
					r[t.name + "_" + e] = o
				}, this)
			},
			_resetTarget: function() {
				var i = this.option,
					t = this._judgeAutoMode();
				xT(function(t) {
					var e = t.axisIndex;
					i[e] = wa(i[e])
				}, this), "axisIndex" === t ? this._autoSetAxisIndex() : "orient" === t && this._autoSetOrient()
			},
			_judgeAutoMode: function() {
				var e = this.option,
					i = !1;
				xT(function(t) {
					null != e[t.axisIndex] && (i = !0)
				}, this);
				var t = e.orient;
				return null == t && i ? "orient" : i ? void 0 : (null == t && (e.orient = "horizontal"), "axisIndex")
			},
			_autoSetAxisIndex: function() {
				var o = !0,
					e = this.get("orient", !0),
					r = this.option,
					t = this.dependentModels;
				if (o) {
					var i = "vertical" === e ? "y" : "x";
					t[i + "Axis"].length ? (r[i + "AxisIndex"] = [0], o = !1) : yT(t.singleAxis, function(t) {
						o && t.get("orient", !0) === e && (r.singleAxisIndex = [t.componentIndex], o = !1)
					})
				}
				o && xT(function(t) {
					if (o) {
						var e = [],
							i = this.dependentModels[t.axis];
						if (i.length && !e.length)
							for (var n = 0, a = i.length; n < a; n++) "category" === i[n].get("type") && e.push(n);
						(r[t.axisIndex] = e).length && (o = !1)
					}
				}, this), o && this.ecModel.eachSeries(function(a) {
					this._isSeriesHasAllAxesTypeOf(a, "value") && xT(function(t) {
						var e = r[t.axisIndex],
							i = a.get(t.axisIndex),
							n = a.get(t.axisId);
						_(e, i = a.ecModel.queryComponents({
							mainType: t.axis,
							index: i,
							id: n
						})[0].componentIndex) < 0 && e.push(i)
					})
				}, this)
			},
			_autoSetOrient: function() {
				var e;
				this.eachTargetAxis(function(t) {
					e = e || t.name
				}, this), this.option.orient = "y" === e ? "vertical" : "horizontal"
			},
			_isSeriesHasAllAxesTypeOf: function(n, a) {
				var o = !0;
				return xT(function(t) {
					var e = n.get(t.axisIndex),
						i = this.dependentModels[t.axis][e];
					i && i.get("type") === a || (o = !1)
				}, this), o
			},
			_setDefaultThrottle: function(t) {
				if (t.hasOwnProperty("throttle") && (this._autoThrottle = !1), this._autoThrottle) {
					var e = this.ecModel.option;
					this.option.throttle = e.animation && 0 < e.animationDurationUpdate ? 100 : 20
				}
			},
			getFirstTargetAxisModel: function() {
				var i;
				return xT(function(t) {
					if (null == i) {
						var e = this.get(t.axisIndex);
						e.length && (i = this.dependentModels[t.axis][e[0]])
					}
				}, this), i
			},
			eachTargetAxis: function(i, n) {
				var a = this.ecModel;
				xT(function(e) {
					yT(this.get(e.axisIndex), function(t) {
						i.call(n, e, t, this, a)
					}, this)
				}, this)
			},
			getAxisProxy: function(t, e) {
				return this._axisProxies[t + "_" + e]
			},
			getAxisModel: function(t, e) {
				var i = this.getAxisProxy(t, e);
				return i && i.getAxisModel()
			},
			setRawRange: function(e) {
				var i = this.option,
					n = this.settledOption;
				yT([
					["start", "startValue"],
					["end", "endValue"]
				], function(t) {
					null == e[t[0]] && null == e[t[1]] || (i[t[0]] = n[t[0]] = e[t[0]], i[t[1]] = n[t[1]] = e[t[1]])
				}, this), bT(this, e)
			},
			setCalculatedRange: function(e) {
				var i = this.option;
				yT(["start", "startValue", "end", "endValue"], function(t) {
					i[t] = e[t]
				})
			},
			getPercentRange: function() {
				var t = this.findRepresentativeAxisProxy();
				if (t) return t.getDataPercentWindow()
			},
			getValueRange: function(t, e) {
				if (null != t || null != e) return this.getAxisProxy(t, e).getDataValueWindow();
				var i = this.findRepresentativeAxisProxy();
				return i ? i.getDataValueWindow() : void 0
			},
			findRepresentativeAxisProxy: function(t) {
				if (t) return t.__dzAxisProxy;
				var e = this._axisProxies;
				for (var i in e)
					if (e.hasOwnProperty(i) && e[i].hostedBy(this)) return e[i];
				for (var i in e)
					if (e.hasOwnProperty(i) && !e[i].hostedBy(this)) return e[i]
			},
			getRangePropMode: function() {
				return this._rangePropMode.slice()
			}
		});

	function wT(e) {
		var i = {};
		return yT(["start", "end", "startValue", "endValue", "throttle"], function(t) {
			e.hasOwnProperty(t) && (i[t] = e[t])
		}), i
	}

	function bT(t, a) {
		var o = t._rangePropMode,
			r = t.get("rangeMode");
		yT([
			["start", "startValue"],
			["end", "endValue"]
		], function(t, e) {
			var i = null != a[t[0]],
				n = null != a[t[1]];
			i && !n ? o[e] = "percent" : !i && n ? o[e] = "value" : r ? o[e] = r[e] : i && (o[e] = "percent")
		})
	}
	var ST = Kh.extend({
		type: "dataZoom",
		render: function(t, e, i, n) {
			this.dataZoomModel = t, this.ecModel = e, this.api = i
		},
		getTargetCoordInfo: function() {
			var t = this.dataZoomModel,
				a = this.ecModel,
				o = {};
			return t.eachTargetAxis(function(t, e) {
				var i = a.getComponent(t.axis, e);
				if (i) {
					var n = i.getCoordSysModel();
					n && function(t, e, i, n) {
						for (var a, o = 0; o < i.length; o++)
							if (i[o].model === t) {
								a = i[o];
								break
							}
						a || i.push(a = {
							model: t,
							axisModels: [],
							coordIndex: n
						});
						a.axisModels.push(e)
					}(n, i, o[n.mainType] || (o[n.mainType] = []), n.componentIndex)
				}
			}, this), o
		}
	});
	_T.extend({
		type: "dataZoom.select"
	}), ST.extend({
		type: "dataZoom.select"
	}), Qd({
		getTargetSeries: function(t) {
			var n = Q();
			return t.eachComponent("dataZoom", function(t) {
				t.eachTargetAxis(function(t, e, i) {
					E(i.getAxisProxy(t.name, e).getTargetSeriesModels(), function(t) {
						n.set(t.uid, t)
					})
				})
			}), n
		},
		modifyOutputEnd: !0,
		overallReset: function(t, n) {
			t.eachComponent("dataZoom", function(t) {
				t.eachTargetAxis(function(t, e, i) {
					i.getAxisProxy(t.name, e).reset(i, n)
				}), t.eachTargetAxis(function(t, e, i) {
					i.getAxisProxy(t.name, e).filterData(i, n)
				})
			}), t.eachComponent("dataZoom", function(t) {
				var e = t.findRepresentativeAxisProxy(),
					i = e.getDataPercentWindow(),
					n = e.getDataValueWindow();
				t.setCalculatedRange({
					start: i[0],
					end: i[1],
					startValue: n[0],
					endValue: n[1]
				})
			})
		}
	}), tf("dataZoom", function(i, t) {
		var n = fT(T(t.eachComponent, t, "dataZoom"), dT, function(t, e) {
				return t.get(e.axisIndex)
			}),
			a = [];
		t.eachComponent({
			mainType: "dataZoom",
			query: i
		}, function(t, e) {
			a.push.apply(a, n(t).nodes)
		}), E(a, function(t, e) {
			t.setRawRange({
				start: i.start,
				end: i.end,
				startValue: i.startValue,
				endValue: i.endValue
			})
		})
	});
	var MT = gc.toolbox.dataZoom,
		IT = E;

	function AT(t, e, i) {
		(this._brushController = new jw(i.getZr())).on("brush", T(this._onBrush, this)).mount(), this._isZoomActive
	}
	AT.defaultOption = {
		show: !0,
		filterMode: "filter",
		icon: {
			zoom: "M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",
			back: "M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"
		},
		title: D(MT.title)
	};
	var TT = AT.prototype;
	TT.render = function(t, e, i, n) {
		this.model = t, this.ecModel = e, this.api = i,
			function(t, e, i, n, a) {
				var o = i._isZoomActive;
				n && "takeGlobalCursor" === n.type && (o = "dataZoomSelect" === n.key && n.dataZoomSelectActive);
				i._isZoomActive = o, t.setIconStatus("zoom", o ? "emphasis" : "normal");
				var r = new XA(CT(t.option), e, {
					include: ["grid"]
				});
				i._brushController.setPanels(r.makePanelOpts(a, function(t) {
					return t.xAxisDeclared && !t.yAxisDeclared ? "lineX" : !t.xAxisDeclared && t.yAxisDeclared ? "lineY" : "rect"
				})).enableBrush(!!o && {
					brushType: "auto",
					brushStyle: {
						lineWidth: 0,
						fill: "rgba(0,0,0,0.2)"
					}
				})
			}(t, e, this, n, i),
			function(t, e) {
				t.setIconStatus("back", 1 < function(t) {
					return rT(t).length
				}(e) ? "emphasis" : "normal")
			}(t, e)
	}, TT.onclick = function(t, e, i) {
		DT[i].call(this)
	}, TT.remove = function(t, e) {
		this._brushController.unmount()
	}, TT.dispose = function(t, e) {
		this._brushController.dispose()
	};
	var DT = {
		zoom: function() {
			var t = !this._isZoomActive;
			this.api.dispatchAction({
				type: "takeGlobalCursor",
				key: "dataZoomSelect",
				dataZoomSelectActive: t
			})
		},
		back: function() {
			this._dispatchZoomAction(function(t) {
				var n = rT(t),
					e = n[n.length - 1];
				1 < n.length && n.pop();
				var a = {};
				return aT(e, function(t, e) {
					for (var i = n.length - 1; 0 <= i; i--) {
						if (t = n[i][e]) {
							a[e] = t;
							break
						}
					}
				}), a
			}(this.ecModel))
		}
	};

	function CT(e) {
		var i = {};
		return E(["xAxisIndex", "yAxisIndex"], function(t) {
			i[t] = e[t], null == i[t] && (i[t] = "all"), !1 !== i[t] && "none" !== i[t] || (i[t] = [])
		}), i
	}
	TT._onBrush = function(t, e) {
		if (e.isEnd && t.length) {
			var s = {},
				l = this.ecModel;
			this._brushController.updateCovers([]), new XA(CT(this.model.option), l, {
					include: ["grid"]
				}).matchOutputRanges(t, l, function(t, e, i) {
					if ("cartesian2d" === i.type) {
						var n = t.brushType;
						"rect" === n ? (a("x", i, e[0]), a("y", i, e[1])) : a({
							lineX: "x",
							lineY: "y"
						} [n], i, e)
					}
				}),
				function(o, t) {
					var r = rT(o);
					aT(t, function(t, e) {
						for (var i = r.length - 1; 0 <= i; i--) {
							if (r[i][e]) break
						}
						if (i < 0) {
							var n = o.queryComponents({
								mainType: "dataZoom",
								subType: "select",
								id: e
							})[0];
							if (n) {
								var a = n.getPercentRange();
								r[0][e] = {
									dataZoomId: e,
									start: a[0],
									end: a[1]
								}
							}
						}
					}), r.push(t)
				}(l, s), this._dispatchZoomAction(s)
		}

		function a(t, e, i) {
			var n = e.getAxis(t),
				a = n.model,
				o = function(e, i, t) {
					var n;
					return t.eachComponent({
						mainType: "dataZoom",
						subType: "select"
					}, function(t) {
						t.getAxisModel(e, i.componentIndex) && (n = t)
					}), n
				}(t, a, l),
				r = o.findRepresentativeAxisProxy(a).getMinMaxSpan();
			null == r.minValueSpan && null == r.maxValueSpan || (i = ww(0, i.slice(), n.scale.getExtent(), 0, r.minValueSpan,
				r.maxValueSpan)), o && (s[o.id] = {
				dataZoomId: o.id,
				startValue: i[0],
				endValue: i[1]
			})
		}
	}, TT._dispatchZoomAction = function(t) {
		var i = [];
		IT(t, function(t, e) {
			i.push(D(t))
		}), i.length && this.api.dispatchAction({
			type: "dataZoom",
			from: this.uid,
			batch: i
		})
	}, bA("dataZoom", AT), Jd(function(s) {
		if (s) {
			var l = s.dataZoom || (s.dataZoom = []);
			k(l) || (s.dataZoom = l = [l]);
			var t = s.toolbox;
			if (t && (k(t) && (t = t[0]), t && t.feature)) {
				var e = t.feature.dataZoom;
				i("xAxis", e), i("yAxis", e)
			}
		}

		function i(n, a) {
			if (a) {
				var o = n + "Index",
					r = a[o];
				null == r || "all" === r || k(r) || (r = !1 === r || "none" === r ? [] : [r]),
					function(t, e) {
						var i = s[t];
						k(i) || (i = i ? [i] : []);
						IT(i, e)
					}(n, function(t, e) {
						if (null == r || "all" === r || -1 !== _(r, e)) {
							var i = {
								type: "select",
								$fromToolbox: !0,
								filterMode: a.filterMode || "filter",
								id: "\0_ec_\0toolbox-dataZoom_" + n + e
							};
							i[o] = e, l.push(i)
						}
					})
			}
		}
	});
	var LT = gc.toolbox.restore;

	function kT(t) {
		this.model = t
	}
	kT.defaultOption = {
		show: !0,
		icon: "M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5",
		title: LT.title
	}, kT.prototype.onclick = function(t, e, i) {
		! function(t) {
			t[oT] = null
		}(t), e.dispatchAction({
			type: "restore",
			from: this.uid
		})
	}, bA("restore", kT), tf({
		type: "restore",
		event: "restore",
		update: "prepareAndUpdate"
	}, function(t, e) {
		e.resetOption("recreate")
	}), sf({
		type: "tooltip",
		dependencies: ["axisPointer"],
		defaultOption: {
			zlevel: 0,
			z: 60,
			show: !0,
			showContent: !0,
			trigger: "item",
			triggerOn: "mousemove|click",
			alwaysShowContent: !1,
			displayMode: "single",
			renderMode: "auto",
			confine: !1,
			showDelay: 0,
			hideDelay: 100,
			transitionDuration: .4,
			enterable: !1,
			backgroundColor: "rgba(50,50,50,0.7)",
			borderColor: "#333",
			borderRadius: 4,
			borderWidth: 0,
			padding: 5,
			extraCssText: "",
			axisPointer: {
				type: "line",
				axis: "auto",
				animation: "auto",
				animationDurationUpdate: 200,
				animationEasingUpdate: "exponentialOut",
				crossStyle: {
					color: "#999",
					width: 1,
					type: "dashed",
					textStyle: {}
				}
			},
			textStyle: {
				color: "#fff",
				fontSize: 14
			}
		}
	});
	var PT = E,
		NT = Bl,
		OT = ["", "-webkit-", "-moz-", "-o-"];

	function ET(a) {
		var o = [],
			t = a.get("transitionDuration"),
			e = a.get("backgroundColor"),
			i = a.getModel("textStyle"),
			n = a.get("padding");
		return t && o.push(function(t) {
			var e = "cubic-bezier(0.23, 1, 0.32, 1)",
				i = "left " + t + "s " + e + ",top " + t + "s " + e;
			return N(OT, function(t) {
				return t + "transition:" + i
			}).join(";")
		}(t)), e && (v.canvasSupported ? o.push("background-Color:" + e) : (o.push("background-Color:#" + Be(e)), o.push(
			"filter:alpha(opacity=70)"))), PT(["width", "color", "radius"], function(t) {
			var e = "border-" + t,
				i = NT(e),
				n = a.get(i);
			null != n && o.push(e + ":" + n + ("color" === t ? "" : "px"))
		}), o.push(function(i) {
			var n = [],
				t = i.get("fontSize"),
				e = i.getTextColor();
			return e && n.push("color:" + e), n.push("font:" + i.getFont()), t && n.push("line-height:" + Math.round(3 * t /
				2) + "px"), PT(["decoration", "align"], function(t) {
				var e = i.get(t);
				e && n.push("text-" + t + ":" + e)
			}), n.join(";")
		}(i)), null != n && o.push("padding:" + Vl(n).join("px ") + "px"), o.join(";") + ";"
	}

	function RT(i, t) {
		if (v.wxa) return null;
		var e = document.createElement("div"),
			n = this._zr = t.getZr();
		this.el = e, this._x = t.getWidth() / 2, this._y = t.getHeight() / 2, i.appendChild(e), this._container = i, this._show = !
			1, this._hideTimeout;
		var a = this;
		e.onmouseenter = function() {
			a._enterable && (clearTimeout(a._hideTimeout), a._show = !0), a._inContent = !0
		}, e.onmousemove = function(t) {
			if (t = t || window.event, !a._enterable) {
				var e = n.handler;
				Vt(i, t, !0), e.dispatch("mousemove", t)
			}
		}, e.onmouseleave = function() {
			a._enterable && a._show && a.hideLater(a._hideDelay), a._inContent = !1
		}
	}

	function zT(t) {
		this._zr = t.getZr(), this._show = !1, this._hideTimeout
	}
	RT.prototype = {
		constructor: RT,
		_enterable: !0,
		update: function() {
			var t = this._container,
				e = t.currentStyle || document.defaultView.getComputedStyle(t),
				i = t.style;
			"absolute" !== i.position && "absolute" !== e.position && (i.position = "relative")
		},
		show: function(t) {
			clearTimeout(this._hideTimeout);
			var e = this.el;
			e.style.cssText = "position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;" + ET(t) +
				";left:" + this._x + "px;top:" + this._y + "px;" + (t.get("extraCssText") || ""), e.style.display = e.innerHTML ?
				"block" : "none", e.style.pointerEvents = this._enterable ? "auto" : "none", this._show = !0
		},
		setContent: function(t) {
			this.el.innerHTML = null == t ? "" : t
		},
		setEnterable: function(t) {
			this._enterable = t
		},
		getSize: function() {
			var t = this.el;
			return [t.clientWidth, t.clientHeight]
		},
		moveTo: function(t, e) {
			var i, n = this._zr;
			n && n.painter && (i = n.painter.getViewportRootOffset()) && (t += i.offsetLeft, e += i.offsetTop);
			var a = this.el.style;
			a.left = t + "px", a.top = e + "px", this._x = t, this._y = e
		},
		hide: function() {
			this.el.style.display = "none", this._show = !1
		},
		hideLater: function(t) {
			!this._show || this._inContent && this._enterable || (t ? (this._hideDelay = t, this._show = !1, this._hideTimeout =
				setTimeout(T(this.hide, this), t)) : this.hide())
		},
		isShow: function() {
			return this._show
		},
		getOuterSize: function() {
			var t = this.el.clientWidth,
				e = this.el.clientHeight;
			if (document.defaultView && document.defaultView.getComputedStyle) {
				var i = document.defaultView.getComputedStyle(this.el);
				i && (t += parseInt(i.borderLeftWidth, 10) + parseInt(i.borderRightWidth, 10), e += parseInt(i.borderTopWidth,
					10) + parseInt(i.borderBottomWidth, 10))
			}
			return {
				width: t,
				height: e
			}
		}
	}, zT.prototype = {
		constructor: zT,
		_enterable: !0,
		update: function() {},
		show: function(t) {
			this._hideTimeout && clearTimeout(this._hideTimeout), this.el.attr("show", !0), this._show = !0
		},
		setContent: function(t, e, i) {
			this.el && this._zr.remove(this.el);
			for (var n = {}, a = t, o = "{marker", r = a.indexOf(o); 0 <= r;) {
				var s = a.indexOf("|}"),
					l = a.substr(r + o.length, s - r - o.length); - 1 < l.indexOf("sub") ? n["marker" + l] = {
					textWidth: 4,
					textHeight: 4,
					textBorderRadius: 2,
					textBackgroundColor: e[l],
					textOffset: [3, 0]
				} : n["marker" + l] = {
					textWidth: 10,
					textHeight: 10,
					textBorderRadius: 5,
					textBackgroundColor: e[l]
				}, r = (a = a.substr(s + 1)).indexOf("{marker")
			}
			this.el = new Dr({
				style: {
					rich: n,
					text: t,
					textLineHeight: 20,
					textBackgroundColor: i.get("backgroundColor"),
					textBorderRadius: i.get("borderRadius"),
					textFill: i.get("textStyle.color"),
					textPadding: i.get("padding")
				},
				z: i.get("z")
			}), this._zr.add(this.el);
			var u = this;
			this.el.on("mouseover", function() {
				u._enterable && (clearTimeout(u._hideTimeout), u._show = !0), u._inContent = !0
			}), this.el.on("mouseout", function() {
				u._enterable && u._show && u.hideLater(u._hideDelay), u._inContent = !1
			})
		},
		setEnterable: function(t) {
			this._enterable = t
		},
		getSize: function() {
			var t = this.el.getBoundingRect();
			return [t.width, t.height]
		},
		moveTo: function(t, e) {
			this.el && this.el.attr("position", [t, e])
		},
		hide: function() {
			this.el && this.el.hide(), this._show = !1
		},
		hideLater: function(t) {
			!this._show || this._inContent && this._enterable || (t ? (this._hideDelay = t, this._show = !1, this._hideTimeout =
				setTimeout(T(this.hide, this), t)) : this.hide())
		},
		isShow: function() {
			return this._show
		},
		getOuterSize: function() {
			var t = this.getSize();
			return {
				width: t[0],
				height: t[1]
			}
		}
	};
	var BT = T,
		VT = E,
		GT = xl,
		FT = new Hr({
			shape: {
				x: -1,
				y: -1,
				width: 2,
				height: 2
			}
		});

	function WT(t) {
		for (var e = t.pop(); t.length;) {
			var i = t.pop();
			i && (dl.isInstance(i) && (i = i.get("tooltip", !0)), "string" == typeof i && (i = {
				formatter: i
			}), e = new dl(i, e, e.ecModel))
		}
		return e
	}

	function HT(t, e) {
		return t.dispatchAction || T(e.dispatchAction, e)
	}

	function ZT(t) {
		return "center" === t || "middle" === t
	}
	lf({
		type: "tooltip",
		init: function(t, e) {
			if (!v.node) {
				var i, n = t.getComponent("tooltip").get("renderMode");
				this._renderMode = Ea(n), "html" === this._renderMode ? (i = new RT(e.getDom(), e), this._newLine = "<br/>") :
					(i = new zT(e), this._newLine = "\n"), this._tooltipContent = i
			}
		},
		render: function(t, e, i) {
			if (!v.node) {
				this.group.removeAll(), this._tooltipModel = t, this._ecModel = e, this._api = i, this._lastDataByCoordSys =
					null, this._alwaysShowContent = t.get("alwaysShowContent");
				var n = this._tooltipContent;
				n.update(), n.setEnterable(t.get("enterable")), this._initGlobalListener(), this._keepShow()
			}
		},
		_initGlobalListener: function() {
			var n = this._tooltipModel.get("triggerOn");
			PM("itemTooltip", this._api, BT(function(t, e, i) {
				"none" !== n && (0 <= n.indexOf(t) ? this._tryShow(e, i) : "leave" === t && this._hide(i))
			}, this))
		},
		_keepShow: function() {
			var t = this._tooltipModel,
				e = this._ecModel,
				i = this._api;
			if (null != this._lastX && null != this._lastY && "none" !== t.get("triggerOn")) {
				var n = this;
				clearTimeout(this._refreshUpdateTimeout), this._refreshUpdateTimeout = setTimeout(function() {
					i.isDisposed() || n.manuallyShowTip(t, e, i, {
						x: n._lastX,
						y: n._lastY
					})
				})
			}
		},
		manuallyShowTip: function(t, e, i, n) {
			if (n.from !== this.uid && !v.node) {
				var a = HT(n, i);
				this._ticket = "";
				var o = n.dataByCoordSys;
				if (n.tooltip && null != n.x && null != n.y) {
					var r = FT;
					r.position = [n.x, n.y], r.update(), r.tooltip = n.tooltip, this._tryShow({
						offsetX: n.x,
						offsetY: n.y,
						target: r
					}, a)
				} else if (o) this._tryShow({
					offsetX: n.x,
					offsetY: n.y,
					position: n.position,
					event: {},
					dataByCoordSys: n.dataByCoordSys,
					tooltipOption: n.tooltipOption
				}, a);
				else if (null != n.seriesIndex) {
					if (this._manuallyAxisShowTip(t, e, i, n)) return;
					var s = wM(n, e),
						l = s.point[0],
						u = s.point[1];
					null != l && null != u && this._tryShow({
						offsetX: l,
						offsetY: u,
						position: n.position,
						target: s.el,
						event: {}
					}, a)
				} else null != n.x && null != n.y && (i.dispatchAction({
					type: "updateAxisPointer",
					x: n.x,
					y: n.y
				}), this._tryShow({
					offsetX: n.x,
					offsetY: n.y,
					position: n.position,
					target: i.getZr().findHover(n.x, n.y).target,
					event: {}
				}, a))
			}
		},
		manuallyHideTip: function(t, e, i, n) {
			var a = this._tooltipContent;
			!this._alwaysShowContent && this._tooltipModel && a.hideLater(this._tooltipModel.get("hideDelay")), this._lastX =
				this._lastY = null, n.from !== this.uid && this._hide(HT(n, i))
		},
		_manuallyAxisShowTip: function(t, e, i, n) {
			var a = n.seriesIndex,
				o = n.dataIndex,
				r = e.getComponent("axisPointer").coordSysAxesInfo;
			if (null != a && null != o && null != r) {
				var s = e.getSeriesByIndex(a);
				if (s)
					if ("axis" === (t = WT([s.getData().getItemModel(o), s, (s.coordinateSystem || {}).model, t])).get("trigger"))
						return i.dispatchAction({
							type: "updateAxisPointer",
							seriesIndex: a,
							dataIndex: o,
							position: n.position
						}), !0
			}
		},
		_tryShow: function(t, e) {
			var i = t.target;
			if (this._tooltipModel) {
				this._lastX = t.offsetX, this._lastY = t.offsetY;
				var n = t.dataByCoordSys;
				n && n.length ? this._showAxisTooltip(n, t) : i && null != i.dataIndex ? (this._lastDataByCoordSys = null, this
					._showSeriesItemTooltip(t, i, e)) : i && i.tooltip ? (this._lastDataByCoordSys = null, this._showComponentItemTooltip(
					t, i, e)) : (this._lastDataByCoordSys = null, this._hide(e))
			}
		},
		_showOrMove: function(t, e) {
			var i = t.get("showDelay");
			e = T(e, this), clearTimeout(this._showTimout), 0 < i ? this._showTimout = setTimeout(e, i) : e()
		},
		_showAxisTooltip: function(t, e) {
			var d = this._ecModel,
				i = this._tooltipModel,
				n = [e.offsetX, e.offsetY],
				a = [],
				f = [],
				o = WT([e.tooltipOption, i]),
				p = this._renderMode,
				r = this._newLine,
				g = {};
			VT(t, function(t) {
				VT(t.dataByAxis, function(s) {
					var l = d.getComponent(s.axisDim + "Axis", s.axisIndex),
						u = s.value,
						h = [];
					if (l && null != u) {
						var c = YM(u, l.axis, d, s.seriesDataIndices, s.valueLabelOpt);
						E(s.seriesDataIndices, function(t) {
							var e = d.getSeriesByIndex(t.seriesIndex),
								i = t.dataIndexInside,
								n = e && e.getDataParams(i);
							if (n.axisDim = s.axisDim, n.axisIndex = s.axisIndex, n.axisType = s.axisType, n.axisId = s.axisId, n.axisValue =
								Gp(l.axis, u), n.axisValueLabel = c, n) {
								f.push(n);
								var a, o = e.formatTooltip(i, !0, null, p);
								if (z(o)) {
									a = o.html;
									var r = o.markers;
									m(g, r)
								} else a = o;
								h.push(a)
							}
						});
						var t = c;
						"html" !== p ? a.push(h.join(r)) : a.push((t ? Wl(t) + r : "") + h.join(r))
					}
				})
			}, this), a.reverse(), a = a.join(this._newLine + this._newLine);
			var s = e.position;
			this._showOrMove(o, function() {
				this._updateContentNotChangedOnAxis(t) ? this._updatePosition(o, s, n[0], n[1], this._tooltipContent, f) :
					this._showTooltipContent(o, a, f, Math.random(), n[0], n[1], s, void 0, g)
			})
		},
		_showSeriesItemTooltip: function(t, e, i) {
			var n = this._ecModel,
				a = e.seriesIndex,
				o = n.getSeriesByIndex(a),
				r = e.dataModel || o,
				s = e.dataIndex,
				l = e.dataType,
				u = r.getData(),
				h = WT([u.getItemModel(s), r, o && (o.coordinateSystem || {}).model, this._tooltipModel]),
				c = h.get("trigger");
			if (null == c || "item" === c) {
				var d, f, p = r.getDataParams(s, l),
					g = r.formatTooltip(s, !1, l, this._renderMode);
				f = z(g) ? (d = g.html, g.markers) : (d = g, null);
				var m = "item_" + r.name + "_" + s;
				this._showOrMove(h, function() {
					this._showTooltipContent(h, d, p, m, t.offsetX, t.offsetY, t.position, t.target, f)
				}), i({
					type: "showTip",
					dataIndexInside: s,
					dataIndex: u.getRawIndex(s),
					seriesIndex: a,
					from: this.uid
				})
			}
		},
		_showComponentItemTooltip: function(t, e, i) {
			var n = e.tooltip;
			if ("string" == typeof n) {
				n = {
					content: n,
					formatter: n
				}
			}
			var a = new dl(n, this._tooltipModel, this._ecModel),
				o = a.get("content"),
				r = Math.random();
			this._showOrMove(a, function() {
				this._showTooltipContent(a, o, a.get("formatterParams") || {}, r, t.offsetX, t.offsetY, t.position, e)
			}), i({
				type: "showTip",
				from: this.uid
			})
		},
		_showTooltipContent: function(i, t, n, e, a, o, r, s, l) {
			if (this._ticket = "", i.get("showContent") && i.get("show")) {
				var u = this._tooltipContent,
					h = i.get("formatter");
				r = r || i.get("position");
				var c = t;
				if (h && "string" == typeof h) c = Ul(h, n, !0);
				else if ("function" == typeof h) {
					var d = BT(function(t, e) {
						t === this._ticket && (u.setContent(e, l, i), this._updatePosition(i, r, a, o, u, n, s))
					}, this);
					this._ticket = e, c = h(n, e, d)
				}
				u.setContent(c, l, i), u.show(i), this._updatePosition(i, r, a, o, u, n, s)
			}
		},
		_updatePosition: function(t, e, i, n, a, o, r) {
			var s = this._api.getWidth(),
				l = this._api.getHeight();
			e = e || t.get("position");
			var u = a.getSize(),
				h = t.get("align"),
				c = t.get("verticalAlign"),
				d = r && r.getBoundingRect().clone();
			if (r && d.applyTransform(r.transform), "function" == typeof e && (e = e([i, n], o, a.el, d, {
					viewSize: [s, l],
					contentSize: u.slice()
				})), k(e)) i = GT(e[0], s), n = GT(e[1], l);
			else if (z(e)) {
				e.width = u[0], e.height = u[1];
				var f = au(e, {
					width: s,
					height: l
				});
				i = f.x, n = f.y, c = h = null
			} else if ("string" == typeof e && r) {
				i = (p = function(t, e, i) {
					var n = i[0],
						a = i[1],
						o = 0,
						r = 0,
						s = e.width,
						l = e.height;
					switch (t) {
						case "inside":
							o = e.x + s / 2 - n / 2, r = e.y + l / 2 - a / 2;
							break;
						case "top":
							o = e.x + s / 2 - n / 2, r = e.y - a - 5;
							break;
						case "bottom":
							o = e.x + s / 2 - n / 2, r = e.y + l + 5;
							break;
						case "left":
							o = e.x - n - 5, r = e.y + l / 2 - a / 2;
							break;
						case "right":
							o = e.x + s + 5, r = e.y + l / 2 - a / 2
					}
					return [o, r]
				}(e, d, u))[0], n = p[1]
			} else {
				var p;
				i = (p = function(t, e, i, n, a, o, r) {
					var s = i.getOuterSize(),
						l = s.width,
						u = s.height;
					null != o && (n < t + l + o ? t -= l + o : t += o);
					null != r && (a < e + u + r ? e -= u + r : e += r);
					return [t, e]
				}(i, n, a, s, l, h ? null : 20, c ? null : 20))[0], n = p[1]
			}
			h && (i -= ZT(h) ? u[0] / 2 : "right" === h ? u[0] : 0), c && (n -= ZT(c) ? u[1] / 2 : "bottom" === c ? u[1] : 0),
				t.get("confine") && (i = (p = function(t, e, i, n, a) {
					var o = i.getOuterSize(),
						r = o.width,
						s = o.height;
					return t = Math.min(t + r, n) - r, e = Math.min(e + s, a) - s, t = Math.max(t, 0), e = Math.max(e, 0), [t, e]
				}(i, n, a, s, l))[0], n = p[1]);
			a.moveTo(i, n)
		},
		_updateContentNotChangedOnAxis: function(n) {
			var t = this._lastDataByCoordSys,
				r = !!t && t.length === n.length;
			return r && VT(t, function(t, e) {
				var i = t.dataByAxis || {},
					o = (n[e] || {}).dataByAxis || [];
				(r &= i.length === o.length) && VT(i, function(t, e) {
					var i = o[e] || {},
						n = t.seriesDataIndices || [],
						a = i.seriesDataIndices || [];
					(r &= t.value === i.value && t.axisType === i.axisType && t.axisId === i.axisId && n.length === a.length) &&
					VT(n, function(t, e) {
						var i = a[e];
						r &= t.seriesIndex === i.seriesIndex && t.dataIndex === i.dataIndex
					})
				})
			}), this._lastDataByCoordSys = n, !!r
		},
		_hide: function(t) {
			this._lastDataByCoordSys = null, t({
				type: "hideTip",
				from: this.uid
			})
		},
		dispose: function(t, e) {
			v.node || (this._tooltipContent.hide(), EM("itemTooltip", e))
		}
	}), tf({
		type: "showTip",
		event: "showTip",
		update: "tooltip:manuallyShowTip"
	}, function() {}), tf({
		type: "hideTip",
		event: "hideTip",
		update: "tooltip:manuallyHideTip"
	}, function() {});
	var UT = ["rect", "polygon", "keep", "clear"];
	var XT = E;

	function YT(t) {
		if (t)
			for (var e in t)
				if (t.hasOwnProperty(e)) return !0
	}

	function jT(t, e, o) {
		var i = {};
		return XT(e, function(n) {
			var a = i[n] = function() {
				function t() {}
				return t.prototype.__hidden = t.prototype, new t
			}();
			XT(t[n], function(t, e) {
				if (Bx.isValidType(e)) {
					var i = {
						type: e,
						visual: t
					};
					o && o(i, n), a[e] = new Bx(i), "opacity" === e && ((i = D(i)).type = "colorAlpha", a.__hidden.__alphaForOpacity =
						new Bx(i))
				}
			})
		}), i
	}

	function qT(e, i, t) {
		var n;
		E(t, function(t) {
			i.hasOwnProperty(t) && YT(i[t]) && (n = !0)
		}), n && E(t, function(t) {
			i.hasOwnProperty(t) && YT(i[t]) ? e[t] = D(i[t]) : delete e[t]
		})
	}
	var KT = {
		lineX: $T(0),
		lineY: $T(1),
		rect: {
			point: function(t, e, i) {
				return t && i.boundingRect.contain(t[0], t[1])
			},
			rect: function(t, e, i) {
				return t && i.boundingRect.intersect(t)
			}
		},
		polygon: {
			point: function(t, e, i) {
				return t && i.boundingRect.contain(t[0], t[1]) && ng(i.range, t[0], t[1])
			},
			rect: function(t, e, i) {
				var n = i.range;
				if (!t || n.length <= 1) return !1;
				var a = t.x,
					o = t.y,
					r = t.width,
					s = t.height,
					l = n[0];
				return !!(ng(n, a, o) || ng(n, a + r, o) || ng(n, a, o + s) || ng(n, a + r, o + s) || bi.create(t).contain(l[0],
					l[1]) || il(a, o, a + r, o, n) || il(a, o, a, o + s, n) || il(a + r, o, a + r, o + s, n) || il(a, o + s, a +
					r, o + s, n)) || void 0
			}
		}
	};

	function $T(o) {
		var r = ["x", "y"],
			s = ["width", "height"];
		return {
			point: function(t, e, i) {
				if (t) {
					var n = i.range;
					return JT(t[o], n)
				}
			},
			rect: function(t, e, i) {
				if (t) {
					var n = i.range,
						a = [t[r[o]], t[r[o]] + t[s[o]]];
					return a[1] < a[0] && a.reverse(), JT(a[0], n) || JT(a[1], n) || JT(n[0], a) || JT(n[1], a)
				}
			}
		}
	}

	function JT(t, e) {
		return e[0] <= t && t <= e[1]
	}
	var QT = ["inBrush", "outOfBrush"],
		tD = "__ecBrushSelect",
		eD = "__ecInBrushSelectEvent",
		iD = cd.VISUAL.BRUSH;

	function nD(t, e) {
		if (!t.isDisposed()) {
			var i = t.getZr();
			i[eD] = !0, t.dispatchAction({
				type: "brushSelect",
				batch: e
			}), i[eD] = !1
		}
	}

	function aD(t, e, i, n) {
		for (var a = 0, o = e.length; a < o; a++) {
			var r = e[a];
			if (t[r.brushType](n, i, r.selectors, r)) return !0
		}
	}

	function oD(t) {
		var r = t.brushSelector;
		if (R(r)) {
			var e = [];
			return E(KT, function(o, t) {
				e[t] = function(t, e, i, n) {
					var a = e.getItemLayout(t);
					return o[r](a, i, n)
				}
			}), e
		}
		if (O(r)) {
			var i = {};
			return E(KT, function(t, e) {
				i[e] = r
			}), i
		}
		return r
	}
	nf(iD, function(e, t, i) {
		e.eachComponent({
			mainType: "brush"
		}, function(t) {
			i && "takeGlobalCursor" === i.type && t.setBrushOption("brush" === i.key ? i.brushOption : {
				brushType: !1
			}), (t.brushTargetManager = new XA(t.option, e)).setInputRanges(t.areas, e)
		})
	}), af(iD, function(p, t, e) {
		var a, g, m = [];
		p.eachComponent({
				mainType: "brush"
			}, function(o, t) {
				var s = {
					brushId: o.id,
					brushIndex: t,
					brushName: o.name,
					areas: D(o.areas),
					selected: []
				};
				m.push(s);
				var e = o.option,
					i = e.brushLink,
					n = [],
					l = [],
					u = [],
					h = 0;
				t || (a = e.throttleType, g = e.throttleDelay);
				var r = N(o.areas, function(t) {
						return function(i) {
							var n = i.selectors = {};
							return E(KT[i.brushType], function(e, t) {
								n[t] = function(t) {
									return e(t, n, i)
								}
							}), i
						}(C({
							boundingRect: rD[t.brushType](t)
						}, t))
					}),
					c = jT(o.option, QT, function(t) {
						t.mappingMethod = "fixed"
					});

				function d(t) {
					return "all" === i || n[t]
				}

				function f(t) {
					return !!t.length
				}
				k(i) && E(i, function(t) {
					n[t] = 1
				}), p.eachSeries(function(t, e) {
					var i = u[e] = [];
					"parallel" === t.subType ? function(t, e) {
						var i = t.coordinateSystem;
						h |= i.hasAxisBrushed(), d(e) && i.eachActiveState(t.getData(), function(t, e) {
							"active" === t && (l[e] = 1)
						})
					}(t, e) : function(e, t, i) {
						var n = oD(e);
						if (!n || function(t, e) {
								var i = t.option.seriesIndex;
								return null != i && "all" !== i && (k(i) ? _(i, e) < 0 : e !== i)
							}(o, t)) return;
						if (E(r, function(t) {
								n[t.brushType] && o.brushTargetManager.controlSeries(t, e, p) && i.push(t), h |= f(i)
							}), d(t) && f(i)) {
							var a = e.getData();
							a.each(function(t) {
								aD(n, i, a, t) && (l[t] = 1)
							})
						}
					}(t, e, i)
				}), p.eachSeries(function(t, e) {
					var i = {
						seriesId: t.id,
						seriesIndex: e,
						seriesName: t.name,
						dataIndex: []
					};
					s.selected.push(i);
					var n = oD(t),
						a = u[e],
						o = t.getData(),
						r = d(e) ? function(t) {
							return l[t] ? (i.dataIndex.push(o.getRawIndex(t)), "inBrush") : "outOfBrush"
						} : function(t) {
							return aD(n, a, o, t) ? (i.dataIndex.push(o.getRawIndex(t)), "inBrush") : "outOfBrush"
						};
					(d(e) ? h : f(a)) && function(t, u, h, c, d, f) {
						var p, g = {};

						function m(t) {
							return h.getItemVisual(p, t)
						}

						function v(t, e) {
							h.setItemVisual(p, t, e)
						}

						function e(t, e) {
							p = null == f ? t : e;
							var i = h.getRawDataItem(p);
							if (!i || !1 !== i.visualMap)
								for (var n = c.call(d, t), a = u[n], o = g[n], r = 0, s = o.length; r < s; r++) {
									var l = o[r];
									a[l] && a[l].applyVisual(t, m, v)
								}
						}
						E(t, function(t) {
							var e = Bx.prepareVisualTypes(u[t]);
							g[t] = e
						}), null == f ? h.each(e) : h.each([f], e)
					}(QT, c, o, r)
				})
			}),
			function(t, e, i, n, a) {
				if (!a) return;
				var o = t.getZr();
				if (o[eD]) return;
				o[tD] || (o[tD] = nD);
				dc(o, tD, i, e)(t, n)
			}(t, a, g, m, e)
	});
	var rD = {
		lineX: et,
		lineY: et,
		rect: function(t) {
			return sD(t.range)
		},
		polygon: function(t) {
			for (var e, i = t.range, n = 0, a = i.length; n < a; n++) {
				e = e || [
					[1 / 0, -1 / 0],
					[1 / 0, -1 / 0]
				];
				var o = i[n];
				o[0] < e[0][0] && (e[0][0] = o[0]), o[0] > e[0][1] && (e[0][1] = o[0]), o[1] < e[1][0] && (e[1][0] = o[1]), o[1] >
					e[1][1] && (e[1][1] = o[1])
			}
			return e && sD(e)
		}
	};

	function sD(t) {
		return new bi(t[0][0], t[1][0], t[0][1] - t[0][0], t[1][1] - t[1][0])
	}
	var lD = ["#ddd"];
	sf({
		type: "brush",
		dependencies: ["geo", "grid", "xAxis", "yAxis", "parallel", "series"],
		defaultOption: {
			toolbox: null,
			brushLink: null,
			seriesIndex: "all",
			geoIndex: null,
			xAxisIndex: null,
			yAxisIndex: null,
			brushType: "rect",
			brushMode: "single",
			transformable: !0,
			brushStyle: {
				borderWidth: 1,
				color: "rgba(120,140,180,0.3)",
				borderColor: "rgba(120,140,180,0.8)"
			},
			throttleType: "fixRate",
			throttleDelay: 0,
			removeOnClick: !0,
			z: 1e4
		},
		areas: [],
		brushType: null,
		brushOption: {},
		coordInfoList: [],
		optionUpdated: function(t, e) {
			var i = this.option;
			e || qT(i, t, ["inBrush", "outOfBrush"]);
			var n = i.inBrush = i.inBrush || {};
			i.outOfBrush = i.outOfBrush || {
				color: lD
			}, n.hasOwnProperty("liftZ") || (n.liftZ = 5)
		},
		setAreas: function(t) {
			t && (this.areas = N(t, function(t) {
				return uD(this.option, t)
			}, this))
		},
		setBrushOption: function(t) {
			this.brushOption = uD(this.option, t), this.brushType = this.brushOption.brushType
		}
	});

	function uD(t, e) {
		return m({
			brushType: t.brushType,
			brushMode: t.brushMode,
			transformable: t.transformable,
			brushStyle: new dl(t.brushStyle).getItemStyle(),
			removeOnClick: t.removeOnClick,
			z: t.z
		}, e, !0)
	}

	function hD(t, e, i, n) {
		n && n.$from === t.id || this._brushController.setPanels(t.brushTargetManager.makePanelOpts(i)).enableBrush(t.brushOption)
			.updateCovers(t.areas.slice())
	}
	lf({
		type: "brush",
		init: function(t, e) {
			this.ecModel = t, this.api = e, this.model, (this._brushController = new jw(e.getZr())).on("brush", T(this._onBrush,
				this)).mount()
		},
		render: function(t) {
			return this.model = t, hD.apply(this, arguments)
		},
		updateTransform: hD,
		updateView: hD,
		dispose: function() {
			this._brushController.dispose()
		},
		_onBrush: function(t, e) {
			var i = this.model.id;
			this.model.brushTargetManager.setOutputRanges(t, this.ecModel), e.isEnd && !e.removeOnClick || this.api.dispatchAction({
				type: "brush",
				brushId: i,
				areas: D(t),
				$from: i
			}), e.isEnd && this.api.dispatchAction({
				type: "brushEnd",
				brushId: i,
				areas: D(t),
				$from: i
			})
		}
	}), tf({
		type: "brush",
		event: "brush"
	}, function(e, t) {
		t.eachComponent({
			mainType: "brush",
			query: e
		}, function(t) {
			t.setAreas(e.areas)
		})
	}), tf({
		type: "brushSelect",
		event: "brushSelected",
		update: "none"
	}, function() {}), tf({
		type: "brushEnd",
		event: "brushEnd",
		update: "none"
	}, function() {});
	var cD = gc.toolbox.brush;

	function dD(t, e, i) {
		this.model = t, this.ecModel = e, this.api = i, this._brushType, this._brushMode
	}
	dD.defaultOption = {
		show: !0,
		type: ["rect", "polygon", "lineX", "lineY", "keep", "clear"],
		icon: {
			rect: "M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",
			polygon: "M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",
			lineX: "M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",
			lineY: "M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",
			keep: "M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",
			clear: "M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"
		},
		title: D(cD.title)
	};
	var fD = dD.prototype;
	fD.render = fD.updateView = function(e, t, i) {
		var n, a, o;
		t.eachComponent({
			mainType: "brush"
		}, function(t) {
			n = t.brushType, a = t.brushOption.brushMode || "single", o |= t.areas.length
		}), this._brushType = n, this._brushMode = a, E(e.get("type", !0), function(t) {
			e.setIconStatus(t, ("keep" === t ? "multiple" === a : "clear" === t ? o : t === n) ? "emphasis" : "normal")
		})
	}, fD.getIcons = function() {
		var t = this.model,
			e = t.get("icon", !0),
			i = {};
		return E(t.get("type", !0), function(t) {
			e[t] && (i[t] = e[t])
		}), i
	}, fD.onclick = function(t, e, i) {
		var n = this._brushType,
			a = this._brushMode;
		"clear" === i ? (e.dispatchAction({
			type: "axisAreaSelect",
			intervals: []
		}), e.dispatchAction({
			type: "brush",
			command: "clear",
			areas: []
		})) : e.dispatchAction({
			type: "takeGlobalCursor",
			key: "brush",
			brushOption: {
				brushType: "keep" === i ? n : n !== i && i,
				brushMode: "keep" === i ? "multiple" === a ? "single" : "multiple" : a
			}
		})
	}, bA("brush", dD), Jd(function(t, e) {
		var i = t && t.brush;
		if (k(i) || (i = i ? [i] : []), i.length) {
			var n = [];
			E(i, function(t) {
				var e = t.hasOwnProperty("toolbox") ? t.toolbox : [];
				e instanceof Array && (n = n.concat(e))
			});
			var a = t && t.toolbox;
			k(a) && (a = a[0]), a || (a = {
				feature: {}
			}, t.toolbox = [a]);
			var o = a.feature || (a.feature = {}),
				r = o.brush || (o.brush = {}),
				s = r.type || (r.type = []);
			s.push.apply(s, n),
				function(i) {
					var e = {};
					E(i, function(t) {
						e[t] = 1
					}), i.length = 0, E(e, function(t, e) {
						i.push(e)
					})
				}(s), e && !s.length && s.push.apply(s, UT)
		}
	}), sf({
		type: "title",
		layoutMode: {
			type: "box",
			ignoreSize: !0
		},
		defaultOption: {
			zlevel: 0,
			z: 6,
			show: !0,
			text: "",
			target: "blank",
			subtext: "",
			subtarget: "blank",
			left: 0,
			top: 0,
			backgroundColor: "rgba(0,0,0,0)",
			borderColor: "#ccc",
			borderWidth: 0,
			padding: 5,
			itemGap: 10,
			textStyle: {
				fontSize: 18,
				fontWeight: "bolder",
				color: "#333"
			},
			subtextStyle: {
				color: "#aaa"
			}
		}
	}), lf({
		type: "title",
		render: function(t, e, i) {
			if (this.group.removeAll(), t.get("show")) {
				var n = this.group,
					a = t.getModel("textStyle"),
					o = t.getModel("subtextStyle"),
					r = t.get("textAlign"),
					s = H(t.get("textBaseline"), t.get("textVerticalAlign")),
					l = new Dr({
						style: Gs({}, a, {
							text: t.get("text"),
							textFill: a.getTextColor()
						}, {
							disableBox: !0
						}),
						z2: 10
					}),
					u = l.getBoundingRect(),
					h = t.get("subtext"),
					c = new Dr({
						style: Gs({}, o, {
							text: h,
							textFill: o.getTextColor(),
							y: u.height + t.get("itemGap"),
							textVerticalAlign: "top"
						}, {
							disableBox: !0
						}),
						z2: 10
					}),
					d = t.get("link"),
					f = t.get("sublink"),
					p = t.get("triggerEvent", !0);
				l.silent = !d && !p, c.silent = !f && !p, d && l.on("click", function() {
					window.open(d, "_" + t.get("target"))
				}), f && c.on("click", function() {
					window.open(f, "_" + t.get("subtarget"))
				}), l.eventData = c.eventData = p ? {
					componentType: "title",
					componentIndex: t.componentIndex
				} : null, n.add(l), h && n.add(c);
				var g = n.getBoundingRect(),
					m = t.getBoxLayoutParams();
				m.width = g.width, m.height = g.height;
				var v = au(m, {
					width: i.getWidth(),
					height: i.getHeight()
				}, t.get("padding"));
				r || ("middle" === (r = t.get("left") || t.get("right")) && (r = "center"), "right" === r ? v.x += v.width :
					"center" === r && (v.x += v.width / 2)), s || ("center" === (s = t.get("top") || t.get("bottom")) && (s =
					"middle"), "bottom" === s ? v.y += v.height : "middle" === s && (v.y += v.height / 2), s = s || "top"), n.attr(
					"position", [v.x, v.y]);
				var y = {
					textAlign: r,
					textVerticalAlign: s
				};
				l.setStyle(y), c.setStyle(y), g = n.getBoundingRect();
				var x = v.margin,
					_ = t.getItemStyle(["color", "opacity"]);
				_.fill = t.get("backgroundColor");
				var w = new Hr({
					shape: {
						x: g.x - x[3],
						y: g.y - x[0],
						width: g.width + x[1] + x[3],
						height: g.height + x[0] + x[2],
						r: t.get("borderRadius")
					},
					style: _,
					subPixelOptimize: !0,
					silent: !0
				});
				n.add(w)
			}
		}
	});

	function pD(t) {
		var e = t.itemStyle || (t.itemStyle = {}),
			i = e.emphasis || (e.emphasis = {}),
			n = t.label || t.label || {},
			a = n.normal || (n.normal = {}),
			o = {
				normal: 1,
				emphasis: 1
			};
		E(n, function(t, e) {
			o[e] || gD(a, e) || (a[e] = t)
		}), i.label && !gD(n, "emphasis") && (n.emphasis = i.label, delete i.label)
	}

	function gD(t, e) {
		return t.hasOwnProperty(e)
	}
	fu.registerSubTypeDefaulter("timeline", function() {
		return "slider"
	}), tf({
		type: "timelineChange",
		event: "timelineChanged",
		update: "prepareAndUpdate"
	}, function(t, e) {
		var i = e.getComponent("timeline");
		return i && null != t.currentIndex && (i.setCurrentIndex(t.currentIndex), !i.get("loop", !0) && i.isIndexMax() &&
			i.setPlayState(!1)), e.resetOption("timeline"), C({
			currentIndex: i.option.currentIndex
		}, t)
	}), tf({
		type: "timelinePlayChange",
		event: "timelinePlayChanged",
		update: "update"
	}, function(t, e) {
		var i = e.getComponent("timeline");
		i && null != t.playState && i.setPlayState(t.playState)
	});
	var mD = fu.extend({
		type: "timeline",
		layoutMode: "box",
		defaultOption: {
			zlevel: 0,
			z: 4,
			show: !0,
			axisType: "time",
			realtime: !0,
			left: "20%",
			top: null,
			right: "20%",
			bottom: 0,
			width: null,
			height: 40,
			padding: 5,
			controlPosition: "left",
			autoPlay: !1,
			rewind: !1,
			loop: !0,
			playInterval: 2e3,
			currentIndex: 0,
			itemStyle: {},
			label: {
				color: "#000"
			},
			data: []
		},
		init: function(t, e, i) {
			this._data, this._names, this.mergeDefaultAndTheme(t, i), this._initData()
		},
		mergeOption: function(t) {
			mD.superApply(this, "mergeOption", arguments), this._initData()
		},
		setCurrentIndex: function(t) {
			null == t && (t = this.option.currentIndex);
			var e = this._data.count();
			this.option.loop ? t = (t % e + e) % e : (e <= t && (t = e - 1), t < 0 && (t = 0)), this.option.currentIndex = t
		},
		getCurrentIndex: function() {
			return this.option.currentIndex
		},
		isIndexMax: function() {
			return this.getCurrentIndex() >= this._data.count() - 1
		},
		setPlayState: function(t) {
			this.option.autoPlay = !!t
		},
		getPlayState: function() {
			return !!this.option.autoPlay
		},
		_initData: function() {
			var t = this.option,
				e = t.data || [],
				i = t.axisType,
				a = this._names = [];
			if ("category" === i) {
				var o = [];
				E(e, function(t, e) {
					var i, n = Ma(t);
					z(t) ? (i = D(t)).value = e : i = e, o.push(i), R(n) || null != n && !isNaN(n) || (n = ""), a.push(n + "")
				}), e = o
			}
			var n = {
				category: "ordinal",
				time: "time"
			} [i] || "number";
			(this._data = new Tf([{
				name: "value",
				type: n
			}], this)).initData(e, a)
		},
		getData: function() {
			return this._data
		},
		getCategories: function() {
			if ("category" === this.get("axisType")) return this._names.slice()
		}
	});
	b(mD.extend({
		type: "timeline.slider",
		defaultOption: {
			backgroundColor: "rgba(0,0,0,0)",
			borderColor: "#ccc",
			borderWidth: 0,
			orient: "horizontal",
			inverse: !1,
			tooltip: {
				trigger: "item"
			},
			symbol: "emptyCircle",
			symbolSize: 10,
			lineStyle: {
				show: !0,
				width: 2,
				color: "#304654"
			},
			label: {
				position: "auto",
				show: !0,
				interval: "auto",
				rotate: 0,
				color: "#304654"
			},
			itemStyle: {
				color: "#304654",
				borderWidth: 1
			},
			checkpointStyle: {
				symbol: "circle",
				symbolSize: 13,
				color: "#c23531",
				borderWidth: 5,
				borderColor: "rgba(0,150,136,0)",
				animation: !0,
				animationDuration: 300,
				animationEasing: "quinticInOut"
			},
			controlStyle: {
				show: !0,
				showPlayBtn: !0,
				showPrevBtn: !0,
				showNextBtn: !0,
				itemSize: 22,
				itemGap: 12,
				position: "left",
				playIcon: "path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",
				stopIcon: "path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",
				nextIcon: "path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z",
				prevIcon: "path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z",
				color: "#304654",
				borderColor: "#304654",
				borderWidth: 1
			},
			emphasis: {
				label: {
					show: !0,
					color: "#c23531"
				},
				itemStyle: {
					color: "#c23531"
				},
				controlStyle: {
					color: "#c23531",
					borderColor: "#c23531",
					borderWidth: 2
				}
			},
			data: []
		}
	}), Th);

	function vD(t, e, i, n) {
		vg.call(this, t, e, i), this.type = n || "value", this.model = null
	}
	var yD = Kh.extend({
		type: "timeline"
	});
	vD.prototype = {
		constructor: vD,
		getLabelModel: function() {
			return this.model.getModel("label")
		},
		isHorizontal: function() {
			return "horizontal" === this.model.get("orient")
		}
	}, w(vD, vg);
	var xD = T,
		_D = E,
		wD = Math.PI;

	function bD(t, e, i, n, a, o) {
		var r = e.get("color");
		a ? (a.setColor(r), i.add(a), o && o.onUpdate(a)) : ((a = Jp(t.get("symbol"), -1, -1, 2, 2, r)).setStyle(
			"strokeNoScale", !0), i.add(a), o && o.onCreate(a));
		var s = e.getItemStyle(["color", "symbol", "symbolSize"]);
		a.setStyle(s), n = m({
			rectHover: !0,
			z2: 100
		}, n, !0);
		var l = t.get("symbolSize");
		(l = l instanceof Array ? l.slice() : [+l, +l])[0] /= 2, l[1] /= 2, n.scale = l;
		var u = t.get("symbolOffset");
		if (u) {
			var h = n.position = n.position || [0, 0];
			h[0] += xl(u[0], l[0]), h[1] += xl(u[1], l[1])
		}
		var c = t.get("symbolRotate");
		return n.rotation = (c || 0) * Math.PI / 180 || 0, a.attr(n), a.updateTransform(), a
	}

	function SD(t, e, i, n, a) {
		if (!t.dragging) {
			var o = n.getModel("checkpointStyle"),
				r = i.dataToCoord(n.getData().get(["value"], e));
			a || !o.get("animation", !0) ? t.attr({
				position: [r, 0]
			}) : (t.stopAnimation(!0), t.animateTo({
				position: [r, 0]
			}, o.get("animationDuration", !0), o.get("animationEasing", !0)))
		}
	}
	yD.extend({
		type: "timeline.slider",
		init: function(t, e) {
			this.api = e, this._axis, this._viewRect, this._timer, this._currentPointer, this._mainGroup, this._labelGroup
		},
		render: function(e, t, i, n) {
			if (this.model = e, this.api = i, this.ecModel = t, this.group.removeAll(), e.get("show", !0)) {
				var a = this._layout(e, i),
					o = this._createGroup("mainGroup"),
					r = this._createGroup("labelGroup"),
					s = this._axis = this._createAxis(a, e);
				e.formatTooltip = function(t) {
					return Wl(s.scale.getLabel(t))
				}, _D(["AxisLine", "AxisTick", "Control", "CurrentPointer"], function(t) {
					this["_render" + t](a, o, s, e)
				}, this), this._renderAxisLabel(a, r, s, e), this._position(a, e)
			}
			this._doPlayStop()
		},
		remove: function() {
			this._clearTimer(), this.group.removeAll()
		},
		dispose: function() {
			this._clearTimer()
		},
		_layout: function(t, e) {
			var i = t.get("label.position"),
				n = t.get("orient"),
				a = function(t, e) {
					return au(t.getBoxLayoutParams(), {
						width: e.getWidth(),
						height: e.getHeight()
					}, t.get("padding"))
				}(t, e);
			null == i || "auto" === i ? i = "horizontal" === n ? a.y + a.height / 2 < e.getHeight() / 2 ? "-" : "+" : a.x +
				a.width / 2 < e.getWidth() / 2 ? "+" : "-" : isNaN(i) && (i = {
					horizontal: {
						top: "-",
						bottom: "+"
					},
					vertical: {
						left: "-",
						right: "+"
					}
				} [n][i]);
			var o, r, s, l, u = {
					horizontal: "center",
					vertical: 0 <= i || "+" === i ? "left" : "right"
				},
				h = {
					horizontal: 0 <= i || "+" === i ? "top" : "bottom",
					vertical: "middle"
				},
				c = {
					horizontal: 0,
					vertical: wD / 2
				},
				d = "vertical" === n ? a.height : a.width,
				f = t.getModel("controlStyle"),
				p = f.get("show", !0),
				g = p ? f.get("itemSize") : 0,
				m = p ? f.get("itemGap") : 0,
				v = g + m,
				y = t.get("label.rotate") || 0;
			y = y * wD / 180;
			var x = f.get("position", !0),
				_ = p && f.get("showPlayBtn", !0),
				w = p && f.get("showPrevBtn", !0),
				b = p && f.get("showNextBtn", !0),
				S = 0,
				M = d;
			return "left" === x || "bottom" === x ? (_ && (o = [0, 0], S += v), w && (r = [S, 0], S += v)) : (_ && (o = [M -
				g, 0
			], M -= v), w && (r = [0, 0], S += v)), b && (s = [M - g, 0], M -= v), l = [S, M], t.get("inverse") && l.reverse(), {
				viewRect: a,
				mainLength: d,
				orient: n,
				rotation: c[n],
				labelRotation: y,
				labelPosOpt: i,
				labelAlign: t.get("label.align") || u[n],
				labelBaseline: t.get("label.verticalAlign") || t.get("label.baseline") || h[n],
				playPosition: o,
				prevBtnPosition: r,
				nextBtnPosition: s,
				axisExtent: l,
				controlSize: g,
				controlGap: m
			}
		},
		_position: function(t, e) {
			var i = this._mainGroup,
				n = this._labelGroup,
				a = t.viewRect;
			if ("vertical" === t.orient) {
				var o = Qt(),
					r = a.x,
					s = a.y + a.height;
				ne(o, o, [-r, -s]), ae(o, o, -wD / 2), ne(o, o, [r, s]), (a = a.clone()).applyTransform(o)
			}
			var l = m(a),
				u = m(i.getBoundingRect()),
				h = m(n.getBoundingRect()),
				c = i.position,
				d = n.position;
			d[0] = c[0] = l[0][0];
			var f, p = t.labelPosOpt;
			isNaN(p) ? (v(c, u, l, 1, f = "+" === p ? 0 : 1), v(d, h, l, 1, 1 - f)) : (v(c, u, l, 1, f = 0 <= p ? 0 : 1), d[
				1] = c[1] + p);

			function g(t) {
				var e = t.position;
				t.origin = [l[0][0] - e[0], l[1][0] - e[1]]
			}

			function m(t) {
				return [
					[t.x, t.x + t.width],
					[t.y, t.y + t.height]
				]
			}

			function v(t, e, i, n, a) {
				t[n] += i[n][a] - e[n][a]
			}
			i.attr("position", c), n.attr("position", d), i.rotation = n.rotation = t.rotation, g(i), g(n)
		},
		_createAxis: function(t, e) {
			var i = e.getData(),
				n = e.get("axisType"),
				a = Bp(e, n);
			a.getTicks = function() {
				return i.mapArray(["value"], function(t) {
					return t
				})
			};
			var o = i.getDataExtent("value");
			a.setExtent(o[0], o[1]), a.niceTicks();
			var r = new vD("value", a, t.axisExtent, n);
			return r.model = e, r
		},
		_createGroup: function(t) {
			var e = this["_" + t] = new Si;
			return this.group.add(e), e
		},
		_renderAxisLine: function(t, e, i, n) {
			var a = i.getExtent();
			n.get("lineStyle.show") && e.add(new Ur({
				shape: {
					x1: a[0],
					y1: 0,
					x2: a[1],
					y2: 0
				},
				style: L({
					lineCap: "round"
				}, n.getModel("lineStyle").getLineStyle()),
				silent: !0,
				z2: 1
			}))
		},
		_renderAxisTick: function(t, s, l, u) {
			var h = u.getData(),
				e = l.scale.getTicks();
			_D(e, function(t) {
				var e = l.dataToCoord(t),
					i = h.getItemModel(t),
					n = i.getModel("itemStyle"),
					a = i.getModel("emphasis.itemStyle"),
					o = {
						position: [e, 0],
						onclick: xD(this._changeTimeline, this, t)
					},
					r = bD(i, n, s, o);
				Os(r, a.getItemStyle()), i.get("tooltip") ? (r.dataIndex = t, r.dataModel = u) : r.dataIndex = r.dataModel =
					null
			}, this)
		},
		_renderAxisLabel: function(s, l, u, t) {
			if (u.getLabelModel().get("show")) {
				var h = t.getData(),
					e = u.getViewLabels();
				_D(e, function(t) {
					var e = t.tickValue,
						i = h.getItemModel(e),
						n = i.getModel("label"),
						a = i.getModel("emphasis.label"),
						o = u.dataToCoord(t.tickValue),
						r = new Dr({
							position: [o, 0],
							rotation: s.labelRotation - s.rotation,
							onclick: xD(this._changeTimeline, this, e),
							silent: !1
						});
					Gs(r.style, n, {
						text: t.formattedLabel,
						textAlign: s.labelAlign,
						textVerticalAlign: s.labelBaseline
					}), l.add(r), Os(r, Gs({}, a))
				}, this)
			}
		},
		_renderControl: function(t, o, e, r) {
			var s = t.controlSize,
				l = t.rotation,
				u = r.getModel("controlStyle").getItemStyle(),
				h = r.getModel("emphasis.controlStyle").getItemStyle(),
				c = [0, -s / 2, s, s],
				i = r.getPlayState(),
				n = r.get("inverse", !0);

			function a(t, e, i, n) {
				if (t) {
					var a = function(t, e, i, n) {
						return gs(t.get(e).replace(/^path:\/\//, ""), D(n || {}), new bi(i[0], i[1], i[2], i[3]), "center")
					}(r, e, c, {
						position: t,
						origin: [s / 2, 0],
						rotation: n ? -l : 0,
						rectHover: !0,
						style: u,
						onclick: i
					});
					o.add(a), Os(a, h)
				}
			}
			a(t.nextBtnPosition, "controlStyle.nextIcon", xD(this._changeTimeline, this, n ? "-" : "+")), a(t.prevBtnPosition,
				"controlStyle.prevIcon", xD(this._changeTimeline, this, n ? "+" : "-")), a(t.playPosition, "controlStyle." + (
				i ? "stopIcon" : "playIcon"), xD(this._handlePlayClick, this, !i), !0)
		},
		_renderCurrentPointer: function(t, e, i, n) {
			var a = n.getData(),
				o = n.getCurrentIndex(),
				r = a.getItemModel(o).getModel("checkpointStyle"),
				s = this,
				l = {
					onCreate: function(t) {
						t.draggable = !0, t.drift = xD(s._handlePointerDrag, s), t.ondragend = xD(s._handlePointerDragend, s), SD(t,
							o, i, n, !0)
					},
					onUpdate: function(t) {
						SD(t, o, i, n)
					}
				};
			this._currentPointer = bD(r, r, this._mainGroup, {}, this._currentPointer, l)
		},
		_handlePlayClick: function(t) {
			this._clearTimer(), this.api.dispatchAction({
				type: "timelinePlayChange",
				playState: t,
				from: this.uid
			})
		},
		_handlePointerDrag: function(t, e, i) {
			this._clearTimer(), this._pointerChangeTimeline([i.offsetX, i.offsetY])
		},
		_handlePointerDragend: function(t) {
			this._pointerChangeTimeline([t.offsetX, t.offsetY], !0)
		},
		_pointerChangeTimeline: function(t, e) {
			var i = this._toAxisCoord(t)[0],
				n = wl(this._axis.getExtent().slice());
			i > n[1] && (i = n[1]), i < n[0] && (i = n[0]), this._currentPointer.position[0] = i, this._currentPointer.dirty();
			var a = this._findNearestTick(i),
				o = this.model;
			(e || a !== o.getCurrentIndex() && o.get("realtime")) && this._changeTimeline(a)
		},
		_doPlayStop: function() {
			this._clearTimer(), this.model.getPlayState() && (this._timer = setTimeout(xD(function() {
				var t = this.model;
				this._changeTimeline(t.getCurrentIndex() + (t.get("rewind", !0) ? -1 : 1))
			}, this), this.model.get("playInterval")))
		},
		_toAxisCoord: function(t) {
			return $s(t, this._mainGroup.getLocalTransform(), !0)
		},
		_findNearestTick: function(a) {
			var o, t = this.model.getData(),
				r = 1 / 0,
				s = this._axis;
			return t.each(["value"], function(t, e) {
				var i = s.dataToCoord(t),
					n = Math.abs(i - a);
				n < r && (r = n, o = e)
			}), o
		},
		_clearTimer: function() {
			this._timer && (clearTimeout(this._timer), this._timer = null)
		},
		_changeTimeline: function(t) {
			var e = this.model.getCurrentIndex();
			"+" === t ? t = e + 1 : "-" === t && (t = e - 1), this.api.dispatchAction({
				type: "timelineChange",
				currentIndex: t,
				from: this.uid
			})
		}
	}), Jd(function(t) {
		var e = t && t.timeline;
		k(e) || (e = e ? [e] : []), E(e, function(t) {
			t && function(t) {
				var e = t.type,
					i = {
						number: "value",
						time: "time"
					};
				i[e] && (t.axisType = i[e], delete t.type);
				if (pD(t), gD(t, "controlPosition")) {
					var n = t.controlStyle || (t.controlStyle = {});
					gD(n, "position") || (n.position = t.controlPosition), "none" !== n.position || gD(n, "show") || (n.show = !
						1, delete n.position), delete t.controlPosition
				}
				E(t.data || [], function(t) {
					z(t) && !k(t) && (!gD(t, "value") && gD(t, "name") && (t.value = t.name), pD(t))
				})
			}(t)
		})
	});
	var MD = zl,
		ID = Wl;

	function AD(t) {
		ba(t, "label", ["show"])
	}
	var TD = sf({
		type: "marker",
		dependencies: ["series", "grid", "polar", "geo"],
		init: function(t, e, i) {
			this.mergeDefaultAndTheme(t, i), this._mergeOption(t, i, !1, !0)
		},
		isAnimationEnabled: function() {
			if (v.node) return !1;
			var t = this.__hostSeries;
			return this.getShallow("animation") && t && t.isAnimationEnabled()
		},
		mergeOption: function(t, e) {
			this._mergeOption(t, e, !1, !1)
		},
		_mergeOption: function(t, n, e, a) {
			var o = this.constructor,
				r = this.mainType + "Model";
			e || n.eachSeries(function(t) {
				var e = t.get(this.mainType, !0),
					i = t[r];
				e && e.data ? (i ? i._mergeOption(e, n, !0) : (a && AD(e), E(e.data, function(t) {
					t instanceof Array ? (AD(t[0]), AD(t[1])) : AD(t)
				}), L(i = new o(e, this, n), {
					mainType: this.mainType,
					seriesIndex: t.seriesIndex,
					name: t.name,
					createdBySelf: !0
				}), i.__hostSeries = t), t[r] = i) : t[r] = null
			}, this)
		},
		formatTooltip: function(t) {
			var e = this.getData(),
				i = this.getRawValue(t),
				n = k(i) ? N(i, MD).join(", ") : MD(i),
				a = e.getName(t),
				o = ID(this.name);
			return null == i && !a || (o += "<br />"), a && (o += ID(a), null != i && (o += " : ")), null != i && (o += ID(n)),
				o
		},
		getData: function() {
			return this._data
		},
		setData: function(t) {
			this._data = t
		}
	});
	b(TD, Th), TD.extend({
		type: "markPoint",
		defaultOption: {
			zlevel: 0,
			z: 5,
			symbol: "pin",
			symbolSize: 50,
			tooltip: {
				trigger: "item"
			},
			label: {
				show: !0,
				position: "inside"
			},
			itemStyle: {
				borderWidth: 2
			},
			emphasis: {
				label: {
					show: !0
				}
			}
		}
	});
	var DD = _;

	function CD(t, e, i, n, a, o) {
		var r = [],
			s = Zf(e, n) ? e.getCalculationInfo("stackResultDimension") : n,
			l = RD(e, s, t),
			u = e.indicesOfNearest(s, l)[0];
		r[a] = e.get(i, u), r[o] = e.get(n, u);
		var h = bl(e.get(n, u));
		return 0 <= (h = Math.min(h, 20)) && (r[o] = +r[o].toFixed(h)), r
	}
	var LD = A,
		kD = {
			min: LD(CD, "min"),
			max: LD(CD, "max"),
			average: LD(CD, "average")
		};

	function PD(t, e) {
		var i = t.getData(),
			n = t.coordinateSystem;
		if (e && ! function(t) {
				return !isNaN(parseFloat(t.x)) && !isNaN(parseFloat(t.y))
			}(e) && !k(e.coord) && n) {
			var a = n.dimensions,
				o = ND(e, i, n, t);
			if ((e = D(e)).type && kD[e.type] && o.baseAxis && o.valueAxis) {
				var r = DD(a, o.baseAxis.dim),
					s = DD(a, o.valueAxis.dim);
				e.coord = kD[e.type](i, o.baseDataDim, o.valueDataDim, r, s), e.value = e.coord[s]
			} else {
				for (var l = [null != e.xAxis ? e.xAxis : e.radiusAxis, null != e.yAxis ? e.yAxis : e.angleAxis], u = 0; u < 2; u++)
					kD[l[u]] && (l[u] = RD(i, i.mapDimension(a[u]), l[u]));
				e.coord = l
			}
		}
		return e
	}

	function ND(t, e, i, n) {
		var a = {};
		return null != t.valueIndex || null != t.valueDim ? (a.valueDataDim = null != t.valueIndex ? e.getDimension(t.valueIndex) :
				t.valueDim, a.valueAxis = i.getAxis(function(t, e) {
					var i = t.getData(),
						n = i.dimensions;
					e = i.getDimension(e);
					for (var a = 0; a < n.length; a++) {
						var o = i.getDimensionInfo(n[a]);
						if (o.name === e) return o.coordDim
					}
				}(n, a.valueDataDim)), a.baseAxis = i.getOtherAxis(a.valueAxis), a.baseDataDim = e.mapDimension(a.baseAxis.dim)) :
			(a.baseAxis = n.getBaseAxis(), a.valueAxis = i.getOtherAxis(a.baseAxis), a.baseDataDim = e.mapDimension(a.baseAxis.dim),
				a.valueDataDim = e.mapDimension(a.valueAxis.dim)), a
	}

	function OD(t, e) {
		return !(t && t.containData && e.coord && ! function(t) {
			return !(isNaN(parseFloat(t.x)) && isNaN(parseFloat(t.y)))
		}(e)) || t.containData(e.coord)
	}

	function ED(t, e, i, n) {
		return n < 2 ? t.coord && t.coord[n] : t.value
	}

	function RD(t, e, i) {
		if ("average" !== i) return "median" === i ? t.getMedian(e) : t.getDataExtent(e, !0)["max" === i ? 1 : 0];
		var n = 0,
			a = 0;
		return t.each(e, function(t, e) {
			isNaN(t) || (n += t, a++)
		}), n / a
	}
	var zD = lf({
		type: "marker",
		init: function() {
			this.markerGroupMap = Q()
		},
		render: function(t, i, n) {
			var e = this.markerGroupMap;
			e.each(function(t) {
				t.__keep = !1
			});
			var a = this.type + "Model";
			i.eachSeries(function(t) {
				var e = t[a];
				e && this.renderSeries(t, e, i, n)
			}, this), e.each(function(t) {
				t.__keep || this.group.remove(t.group)
			}, this)
		},
		renderSeries: function() {}
	});

	function BD(s, l, u) {
		var h = l.coordinateSystem;
		s.each(function(t) {
			var e, i = s.getItemModel(t),
				n = xl(i.get("x"), u.getWidth()),
				a = xl(i.get("y"), u.getHeight());
			if (isNaN(n) || isNaN(a)) {
				if (l.getMarkerPosition) e = l.getMarkerPosition(s.getValues(s.dimensions, t));
				else if (h) {
					var o = s.get(h.dimensions[0], t),
						r = s.get(h.dimensions[1], t);
					e = h.dataToPoint([o, r])
				}
			} else e = [n, a];
			isNaN(n) || (e[0] = n), isNaN(a) || (e[1] = a), s.setItemLayout(t, e)
		})
	}
	zD.extend({
		type: "markPoint",
		updateTransform: function(t, e, i) {
			e.eachSeries(function(t) {
				var e = t.markPointModel;
				e && (BD(e.getData(), t, i), this.markerGroupMap.get(t.id).updateLayout(e))
			}, this)
		},
		renderSeries: function(t, l, e, i) {
			var n = t.coordinateSystem,
				a = t.id,
				u = t.getData(),
				o = this.markerGroupMap,
				r = o.get(a) || o.set(a, new Ng),
				h = function(t, e, i) {
					var n;
					n = t ? N(t && t.dimensions, function(t) {
						return C({
							name: t
						}, e.getData().getDimensionInfo(e.getData().mapDimension(t)) || {})
					}) : [{
						name: "value",
						type: "float"
					}];
					var a = new Tf(n, i),
						o = N(i.get("data"), A(PD, e));
					t && (o = M(o, A(OD, t)));
					return a.initData(o, null, t ? ED : function(t) {
						return t.value
					}), a
				}(n, t, l);
			l.setData(h), BD(l.getData(), t, i), h.each(function(t) {
				var e = h.getItemModel(t),
					i = e.getShallow("symbol"),
					n = e.getShallow("symbolSize"),
					a = O(i),
					o = O(n);
				if (a || o) {
					var r = l.getRawValue(t),
						s = l.getDataParams(t);
					a && (i = i(r, s)), o && (n = n(r, s))
				}
				h.setItemVisual(t, {
					symbol: i,
					symbolSize: n,
					color: e.get("itemStyle.color") || u.getVisual("color")
				})
			}), r.updateData(h), this.group.add(r.group), h.eachItemGraphicEl(function(t) {
				t.traverse(function(t) {
					t.dataModel = l
				})
			}), r.__keep = !0, r.group.silent = l.get("silent") || t.get("silent")
		}
	}), Jd(function(t) {
		t.markPoint = t.markPoint || {}
	}), TD.extend({
		type: "markLine",
		defaultOption: {
			zlevel: 0,
			z: 5,
			symbol: ["circle", "arrow"],
			symbolSize: [8, 16],
			precision: 2,
			tooltip: {
				trigger: "item"
			},
			label: {
				show: !0,
				position: "end"
			},
			lineStyle: {
				type: "dashed"
			},
			emphasis: {
				label: {
					show: !0
				},
				lineStyle: {
					width: 3
				}
			},
			animationEasing: "linear"
		}
	});

	function VD(t, e, i, n) {
		var a = t.getData(),
			o = n.type;
		if (!k(n) && ("min" === o || "max" === o || "average" === o || "median" === o || null != n.xAxis || null != n.yAxis)) {
			var r, s;
			if (null != n.yAxis || null != n.xAxis) r = e.getAxis(null != n.yAxis ? "y" : "x"), s = W(n.yAxis, n.xAxis);
			else {
				var l = ND(n, a, e, t);
				r = l.valueAxis, s = RD(a, Uf(a, l.valueDataDim), o)
			}
			var u = "x" === r.dim ? 0 : 1,
				h = 1 - u,
				c = D(n),
				d = {};
			c.type = null, c.coord = [], d.coord = [], c.coord[h] = -1 / 0, d.coord[h] = 1 / 0;
			var f = i.get("precision");
			0 <= f && "number" == typeof s && (s = +s.toFixed(Math.min(f, 20))), c.coord[u] = d.coord[u] = s, n = [c, d, {
				type: o,
				valueIndex: n.valueIndex,
				value: s
			}]
		}
		return (n = [PD(t, n[0]), PD(t, n[1]), L({}, n[2])])[2].type = n[2].type || "", m(n[2], n[0]), m(n[2], n[1]), n
	}

	function GD(t) {
		return !isNaN(t) && !isFinite(t)
	}

	function FD(t, e, i, n) {
		var a = 1 - t,
			o = n.dimensions[t];
		return GD(e[a]) && GD(i[a]) && e[t] === i[t] && n.getAxis(o).containData(e[t])
	}

	function WD(t, e) {
		if ("cartesian2d" === t.type) {
			var i = e[0].coord,
				n = e[1].coord;
			if (i && n && (FD(1, i, n, t) || FD(0, i, n, t))) return !0
		}
		return OD(t, e[0]) && OD(t, e[1])
	}

	function HD(t, e, i, n, a) {
		var o, r = n.coordinateSystem,
			s = t.getItemModel(e),
			l = xl(s.get("x"), a.getWidth()),
			u = xl(s.get("y"), a.getHeight());
		if (isNaN(l) || isNaN(u)) {
			if (n.getMarkerPosition) o = n.getMarkerPosition(t.getValues(t.dimensions, e));
			else {
				var h = r.dimensions,
					c = t.get(h[0], e),
					d = t.get(h[1], e);
				o = r.dataToPoint([c, d])
			}
			if ("cartesian2d" === r.type) {
				var f = r.getAxis("x"),
					p = r.getAxis("y");
				h = r.dimensions;
				GD(t.get(h[0], e)) ? o[0] = f.toGlobalCoord(f.getExtent()[i ? 0 : 1]) : GD(t.get(h[1], e)) && (o[1] = p.toGlobalCoord(
					p.getExtent()[i ? 0 : 1]))
			}
			isNaN(l) || (o[0] = l), isNaN(u) || (o[1] = u)
		} else o = [l, u];
		t.setItemLayout(e, o)
	}
	zD.extend({
		type: "markLine",
		updateTransform: function(t, e, o) {
			e.eachSeries(function(e) {
				var t = e.markLineModel;
				if (t) {
					var i = t.getData(),
						n = t.__from,
						a = t.__to;
					n.each(function(t) {
						HD(n, t, !0, e, o), HD(a, t, !1, e, o)
					}), i.each(function(t) {
						i.setItemLayout(t, [n.getItemLayout(t), a.getItemLayout(t)])
					}), this.markerGroupMap.get(e.id).updateLayout()
				}
			}, this)
		},
		renderSeries: function(a, i, t, o) {
			var e = a.coordinateSystem,
				n = a.id,
				r = a.getData(),
				s = this.markerGroupMap,
				l = s.get(n) || s.set(n, new z_);
			this.group.add(l.group);
			var u = function(t, e, i) {
					var n;
					n = t ? N(t && t.dimensions, function(t) {
						return C({
							name: t
						}, e.getData().getDimensionInfo(e.getData().mapDimension(t)) || {})
					}) : [{
						name: "value",
						type: "float"
					}];
					var a = new Tf(n, i),
						o = new Tf(n, i),
						r = new Tf([], i),
						s = N(i.get("data"), A(VD, e, t, i));
					t && (s = M(s, A(WD, t)));
					var l = t ? ED : function(t) {
						return t.value
					};
					return a.initData(N(s, function(t) {
						return t[0]
					}), null, l), o.initData(N(s, function(t) {
						return t[1]
					}), null, l), r.initData(N(s, function(t) {
						return t[2]
					})), r.hasItemOption = !0, {
						from: a,
						to: o,
						line: r
					}
				}(e, a, i),
				h = u.from,
				c = u.to,
				d = u.line;
			i.__from = h, i.__to = c, i.setData(d);
			var f = i.get("symbol"),
				p = i.get("symbolSize");

			function g(t, e, i) {
				var n = t.getItemModel(e);
				HD(t, e, i, a, o), t.setItemVisual(e, {
					symbolSize: n.get("symbolSize") || p[i ? 0 : 1],
					symbol: n.get("symbol", !0) || f[i ? 0 : 1],
					color: n.get("itemStyle.color") || r.getVisual("color")
				})
			}
			k(f) || (f = [f, f]), "number" == typeof p && (p = [p, p]), u.from.each(function(t) {
				g(h, t, !0), g(c, t, !1)
			}), d.each(function(t) {
				var e = d.getItemModel(t).get("lineStyle.color");
				d.setItemVisual(t, {
					color: e || h.getItemVisual(t, "color")
				}), d.setItemLayout(t, [h.getItemLayout(t), c.getItemLayout(t)]), d.setItemVisual(t, {
					fromSymbolSize: h.getItemVisual(t, "symbolSize"),
					fromSymbol: h.getItemVisual(t, "symbol"),
					toSymbolSize: c.getItemVisual(t, "symbolSize"),
					toSymbol: c.getItemVisual(t, "symbol")
				})
			}), l.updateData(d), u.line.eachItemGraphicEl(function(t, e) {
				t.traverse(function(t) {
					t.dataModel = i
				})
			}), l.__keep = !0, l.group.silent = i.get("silent") || a.get("silent")
		}
	}), Jd(function(t) {
		t.markLine = t.markLine || {}
	}), TD.extend({
		type: "markArea",
		defaultOption: {
			zlevel: 0,
			z: 1,
			tooltip: {
				trigger: "item"
			},
			animation: !1,
			label: {
				show: !0,
				position: "top"
			},
			itemStyle: {
				borderWidth: 0
			},
			emphasis: {
				label: {
					show: !0,
					position: "top"
				}
			}
		}
	});

	function ZD(t, e, i, n) {
		var a = PD(t, n[0]),
			o = PD(t, n[1]),
			r = W,
			s = a.coord,
			l = o.coord;
		s[0] = r(s[0], -1 / 0), s[1] = r(s[1], -1 / 0), l[0] = r(l[0], 1 / 0), l[1] = r(l[1], 1 / 0);
		var u = p([{}, a, o]);
		return u.coord = [a.coord, o.coord], u.x0 = a.x, u.y0 = a.y, u.x1 = o.x, u.y1 = o.y, u
	}

	function UD(t) {
		return !isNaN(t) && !isFinite(t)
	}

	function XD(t, e, i) {
		var n = 1 - t;
		return UD(e[n]) && UD(i[n])
	}

	function YD(t, e) {
		var i = e.coord[0],
			n = e.coord[1];
		return !("cartesian2d" !== t.type || !i || !n || !XD(1, i, n) && !XD(0, i, n)) || (OD(t, {
			coord: i,
			x: e.x0,
			y: e.y0
		}) || OD(t, {
			coord: n,
			x: e.x1,
			y: e.y1
		}))
	}

	function jD(t, e, i, n, a) {
		var o, r = n.coordinateSystem,
			s = t.getItemModel(e),
			l = xl(s.get(i[0]), a.getWidth()),
			u = xl(s.get(i[1]), a.getHeight());
		if (isNaN(l) || isNaN(u)) {
			if (n.getMarkerPosition) o = n.getMarkerPosition(t.getValues(i, e));
			else {
				var h = [f = t.get(i[0], e), p = t.get(i[1], e)];
				r.clampData && r.clampData(h, h), o = r.dataToPoint(h, !0)
			}
			if ("cartesian2d" === r.type) {
				var c = r.getAxis("x"),
					d = r.getAxis("y"),
					f = t.get(i[0], e),
					p = t.get(i[1], e);
				UD(f) ? o[0] = c.toGlobalCoord(c.getExtent()["x0" === i[0] ? 0 : 1]) : UD(p) && (o[1] = d.toGlobalCoord(d.getExtent()[
					"y0" === i[1] ? 0 : 1]))
			}
			isNaN(l) || (o[0] = l), isNaN(u) || (o[1] = u)
		} else o = [l, u];
		return o
	}
	var qD = [
		["x0", "y0"],
		["x1", "y0"],
		["x1", "y1"],
		["x0", "y1"]
	];
	zD.extend({
		type: "markArea",
		updateTransform: function(t, e, a) {
			e.eachSeries(function(i) {
				var t = i.markAreaModel;
				if (t) {
					var n = t.getData();
					n.each(function(e) {
						var t = N(qD, function(t) {
							return jD(n, e, t, i, a)
						});
						n.setItemLayout(e, t), n.getItemGraphicEl(e).setShape("points", t)
					})
				}
			}, this)
		},
		renderSeries: function(i, r, t, n) {
			var e = i.coordinateSystem,
				a = i.id,
				o = i.getData(),
				s = this.markerGroupMap,
				l = s.get(a) || s.set(a, {
					group: new Si
				});
			this.group.add(l.group), l.__keep = !0;
			var u = function(t, i, e) {
				var n, a;
				a = t ? (n = N(t && t.dimensions, function(t) {
					var e = i.getData();
					return C({
						name: t
					}, e.getDimensionInfo(e.mapDimension(t)) || {})
				}), new Tf(N(["x0", "y0", "x1", "y1"], function(t, e) {
					return {
						name: t,
						type: n[e % 2].type
					}
				}), e)) : new Tf(n = [{
					name: "value",
					type: "float"
				}], e);
				var o = N(e.get("data"), A(ZD, i, t, e));
				t && (o = M(o, A(YD, t)));
				var r = t ? function(t, e, i, n) {
					return t.coord[Math.floor(n / 2)][n % 2]
				} : function(t) {
					return t.value
				};
				return a.initData(o, null, r), a.hasItemOption = !0, a
			}(e, i, r);
			r.setData(u), u.each(function(e) {
				u.setItemLayout(e, N(qD, function(t) {
					return jD(u, e, t, i, n)
				})), u.setItemVisual(e, {
					color: o.getVisual("color")
				})
			}), u.diff(l.__data).add(function(t) {
				var e = new Rr({
					shape: {
						points: u.getItemLayout(t)
					}
				});
				u.setItemGraphicEl(t, e), l.group.add(e)
			}).update(function(t, e) {
				var i = l.__data.getItemGraphicEl(e);
				js(i, {
					shape: {
						points: u.getItemLayout(t)
					}
				}, r, t), l.group.add(i), u.setItemGraphicEl(t, i)
			}).remove(function(t) {
				var e = l.__data.getItemGraphicEl(t);
				l.group.remove(e)
			}).execute(), u.eachItemGraphicEl(function(t, e) {
				var i = u.getItemModel(e),
					n = i.getModel("label"),
					a = i.getModel("emphasis.label"),
					o = u.getItemVisual(e, "color");
				t.useStyle(C(i.getModel("itemStyle").getItemStyle(), {
					fill: Ze(o, .4),
					stroke: o
				})), t.hoverStyle = i.getModel("emphasis.itemStyle").getItemStyle(), Bs(t.style, t.hoverStyle, n, a, {
					labelFetcher: r,
					labelDataIndex: e,
					defaultText: u.getName(e) || "",
					isRectText: !0,
					autoColor: o
				}), Os(t, {}), t.dataModel = r
			}), l.__data = u, l.group.silent = r.get("silent") || i.get("silent")
		}
	}), Jd(function(t) {
		t.markArea = t.markArea || {}
	});
	var KD = gc.legend.selector,
		$D = {
			all: {
				type: "all",
				title: D(KD.all)
			},
			inverse: {
				type: "inverse",
				title: D(KD.inverse)
			}
		},
		JD = sf({
			type: "legend.plain",
			dependencies: ["series"],
			layoutMode: {
				type: "box",
				ignoreSize: !0
			},
			init: function(t, e, i) {
				this.mergeDefaultAndTheme(t, i), t.selected = t.selected || {}, this._updateSelector(t)
			},
			mergeOption: function(t) {
				JD.superCall(this, "mergeOption", t), this._updateSelector(t)
			},
			_updateSelector: function(t) {
				var i = t.selector;
				!0 === i && (i = t.selector = ["all", "inverse"]), k(i) && E(i, function(t, e) {
					R(t) && (t = {
						type: t
					}), i[e] = m(t, $D[t.type])
				})
			},
			optionUpdated: function() {
				this._updateData(this.ecModel);
				var t = this._data;
				if (t[0] && "single" === this.get("selectedMode")) {
					for (var e = !1, i = 0; i < t.length; i++) {
						var n = t[i].get("name");
						if (this.isSelected(n)) {
							this.select(n), e = !0;
							break
						}
					}
					e || this.select(t[0].get("name"))
				}
			},
			_updateData: function(o) {
				var r = [],
					s = [];
				o.eachRawSeries(function(t) {
					var e, i = t.name;
					if (s.push(i), t.legendDataProvider) {
						var n = t.legendDataProvider(),
							a = n.mapArray(n.getName);
						o.isSeriesFiltered(t) || (s = s.concat(a)), a.length ? r = r.concat(a) : e = !0
					} else e = !0;
					e && Ta(t) && r.push(t.name)
				}), this._availableNames = s;
				var t = N(this.get("data") || r, function(t) {
					return "string" != typeof t && "number" != typeof t || (t = {
						name: t
					}), new dl(t, this, this.ecModel)
				}, this);
				this._data = t
			},
			getData: function() {
				return this._data
			},
			select: function(t) {
				var e = this.option.selected;
				"single" === this.get("selectedMode") && E(this._data, function(t) {
					e[t.get("name")] = !1
				});
				e[t] = !0
			},
			unSelect: function(t) {
				"single" !== this.get("selectedMode") && (this.option.selected[t] = !1)
			},
			toggleSelected: function(t) {
				var e = this.option.selected;
				e.hasOwnProperty(t) || (e[t] = !0), this[e[t] ? "unSelect" : "select"](t)
			},
			allSelect: function() {
				var t = this._data,
					e = this.option.selected;
				E(t, function(t) {
					e[t.get("name", !0)] = !0
				})
			},
			inverseSelect: function() {
				var t = this._data,
					i = this.option.selected;
				E(t, function(t) {
					var e = t.get("name", !0);
					i.hasOwnProperty(e) || (i[e] = !0), i[e] = !i[e]
				})
			},
			isSelected: function(t) {
				var e = this.option.selected;
				return !(e.hasOwnProperty(t) && !e[t]) && 0 <= _(this._availableNames, t)
			},
			getOrient: function() {
				return "vertical" === this.get("orient") ? {
					index: 1,
					name: "vertical"
				} : {
					index: 0,
					name: "horizontal"
				}
			},
			defaultOption: {
				zlevel: 0,
				z: 4,
				show: !0,
				orient: "horizontal",
				left: "center",
				top: 0,
				align: "auto",
				backgroundColor: "rgba(0,0,0,0)",
				borderColor: "#ccc",
				borderRadius: 0,
				borderWidth: 0,
				padding: 5,
				itemGap: 10,
				itemWidth: 25,
				itemHeight: 14,
				inactiveColor: "#ccc",
				inactiveBorderColor: "#ccc",
				itemStyle: {
					borderWidth: 0
				},
				textStyle: {
					color: "#333"
				},
				selectedMode: !0,
				selector: !1,
				selectorLabel: {
					show: !0,
					borderRadius: 10,
					padding: [3, 5, 3, 5],
					fontSize: 12,
					fontFamily: " sans-serif",
					color: "#666",
					borderWidth: 1,
					borderColor: "#666"
				},
				emphasis: {
					selectorLabel: {
						show: !0,
						color: "#eee",
						backgroundColor: "#666"
					}
				},
				selectorPosition: "auto",
				selectorItemGap: 7,
				selectorButtonGap: 10,
				tooltip: {
					show: !1
				}
			}
		});

	function QD(t, e, i) {
		var a, o = {},
			r = "toggleSelected" === t;
		return i.eachComponent("legend", function(n) {
			r && null != a ? n[a ? "select" : "unSelect"](e.name) : "allSelect" === t || "inverseSelect" === t ? n[t]() : (n[
				t](e.name), a = n.isSelected(e.name)), E(n.getData(), function(t) {
				var e = t.get("name");
				if ("\n" !== e && "" !== e) {
					var i = n.isSelected(e);
					o.hasOwnProperty(e) ? o[e] = o[e] && i : o[e] = i
				}
			})
		}), "allSelect" === t || "inverseSelect" === t ? {
			selected: o
		} : {
			name: e.name,
			selected: o
		}
	}
	tf("legendToggleSelect", "legendselectchanged", A(QD, "toggleSelected")), tf("legendAllSelect", "legendselectall", A(
		QD, "allSelect")), tf("legendInverseSelect", "legendinverseselect", A(QD, "inverseSelect")), tf("legendSelect",
		"legendselected", A(QD, "select")), tf("legendUnSelect", "legendunselected", A(QD, "unSelect"));
	var tC = A,
		eC = E,
		iC = Si,
		nC = lf({
			type: "legend.plain",
			newlineDisabled: !1,
			init: function() {
				this.group.add(this._contentGroup = new iC), this._backgroundEl, this.group.add(this._selectorGroup = new iC),
					this._isFirstRender = !0
			},
			getContentGroup: function() {
				return this._contentGroup
			},
			getSelectorGroup: function() {
				return this._selectorGroup
			},
			render: function(t, e, i) {
				var n = this._isFirstRender;
				if (this._isFirstRender = !1, this.resetInner(), t.get("show", !0)) {
					var a = t.get("align"),
						o = t.get("orient");
					a && "auto" !== a || (a = "right" === t.get("left") && "vertical" === o ? "right" : "left");
					var r = t.get("selector", !0),
						s = t.get("selectorPosition", !0);
					!r || s && "auto" !== s || (s = "horizontal" === o ? "end" : "start"), this.renderInner(a, t, e, i, r, o, s);
					var l = t.getBoxLayoutParams(),
						u = {
							width: i.getWidth(),
							height: i.getHeight()
						},
						h = t.get("padding"),
						c = au(l, u, h),
						d = this.layoutInner(t, a, c, n, r, s),
						f = au(C({
							width: d.width,
							height: d.height
						}, l), u, h);
					this.group.attr("position", [f.x - d.x, f.y - d.y]), this.group.add(this._backgroundEl = IA(d, t))
				}
			},
			resetInner: function() {
				this.getContentGroup().removeAll(), this._backgroundEl && this.group.remove(this._backgroundEl), this.getSelectorGroup()
					.removeAll()
			},
			renderInner: function(u, h, c, d, t, e, i) {
				var f = this.getContentGroup(),
					p = Q(),
					g = h.get("selectedMode"),
					m = [];
				c.eachRawSeries(function(t) {
					t.get("legendHoverLink") || m.push(t.id)
				}), eC(h.getData(), function(o, r) {
					var s = o.get("name");
					if (this.newlineDisabled || "" !== s && "\n" !== s) {
						var t = c.getSeriesByName(s)[0];
						if (!p.get(s))
							if (t) {
								var e = t.getData(),
									i = e.getVisual("color"),
									n = e.getVisual("borderColor");
								"function" == typeof i && (i = i(t.getDataParams(0))), "function" == typeof n && (n = n(t.getDataParams(0)));
								var a = e.getVisual("legendSymbol") || "roundRect",
									l = e.getVisual("symbol");
								this._createItem(s, r, o, h, a, l, u, i, n, g).on("click", tC(oC, s, d)).on("mouseover", tC(rC, t.name,
									null, d, m)).on("mouseout", tC(sC, t.name, null, d, m)), p.set(s, !0)
							} else c.eachRawSeries(function(t) {
								if (!p.get(s) && t.legendDataProvider) {
									var e = t.legendDataProvider(),
										i = e.indexOfName(s);
									if (i < 0) return;
									var n = e.getItemVisual(i, "color"),
										a = e.getItemVisual(i, "borderColor");
									this._createItem(s, r, o, h, "roundRect", null, u, n, a, g).on("click", tC(oC, s, d)).on("mouseover",
										tC(rC, null, s, d, m)).on("mouseout", tC(sC, null, s, d, m)), p.set(s, !0)
								}
							}, this)
					} else f.add(new iC({
						newline: !0
					}))
				}, this), t && this._createSelector(t, h, d, e, i)
			},
			_createSelector: function(t, o, r, e, i) {
				var s = this.getSelectorGroup();
				eC(t, function(t) {
					! function(t) {
						var e = t.type,
							i = new Dr({
								style: {
									x: 0,
									y: 0,
									align: "center",
									verticalAlign: "middle"
								},
								onclick: function() {
									r.dispatchAction({
										type: "all" === e ? "legendAllSelect" : "legendInverseSelect"
									})
								}
							});
						s.add(i);
						var n = o.getModel("selectorLabel"),
							a = o.getModel("emphasis.selectorLabel");
						Bs(i.style, i.hoverStyle = {}, n, a, {
							defaultText: t.title,
							isRectText: !1
						}), Os(i)
					}(t)
				})
			},
			_createItem: function(t, e, i, n, a, o, r, s, l, u) {
				var h = n.get("itemWidth"),
					c = n.get("itemHeight"),
					d = n.get("inactiveColor"),
					f = n.get("inactiveBorderColor"),
					p = n.get("symbolKeepAspect"),
					g = n.getModel("itemStyle"),
					m = n.isSelected(t),
					v = new iC,
					y = i.getModel("textStyle"),
					x = i.get("icon"),
					_ = i.getModel("tooltip"),
					w = _.parentModel,
					b = Jp(a = x || a, 0, 0, h, c, m ? s : d, null == p || p);
				if (v.add(aC(b, a, g, l, f, m)), !x && o && (o !== a || "none" === o)) {
					var S = .8 * c;
					"none" === o && (o = "circle");
					var M = Jp(o, (h - S) / 2, (c - S) / 2, S, S, m ? s : d, null == p || p);
					v.add(aC(M, o, g, l, f, m))
				}
				var I = "left" === r ? h + 5 : -5,
					A = r,
					T = n.get("formatter"),
					D = t;
				"string" == typeof T && T ? D = T.replace("{name}", null != t ? t : "") : "function" == typeof T && (D = T(t)),
					v.add(new Dr({
						style: Gs({}, y, {
							text: D,
							x: I,
							y: c / 2,
							textFill: m ? y.getTextColor() : d,
							textAlign: A,
							textVerticalAlign: "middle"
						})
					}));
				var C = new Hr({
					shape: v.getBoundingRect(),
					invisible: !0,
					tooltip: _.get("show") ? L({
						content: t,
						formatter: w.get("formatter", !0) || function() {
							return t
						},
						formatterParams: {
							componentType: "legend",
							legendIndex: n.componentIndex,
							name: t,
							$vars: ["name"]
						}
					}, _.option) : null
				});
				return v.add(C), v.eachChild(function(t) {
					t.silent = !0
				}), C.silent = !u, this.getContentGroup().add(v), Os(v), v.__legendDataIndex = e, v
			},
			layoutInner: function(t, e, i, n, a, o) {
				var r = this.getContentGroup(),
					s = this.getSelectorGroup();
				nu(t.get("orient"), r, t.get("itemGap"), i.width, i.height);
				var l = r.getBoundingRect(),
					u = [-l.x, -l.y];
				if (a) {
					nu("horizontal", s, t.get("selectorItemGap", !0));
					var h = s.getBoundingRect(),
						c = [-h.x, -h.y],
						d = t.get("selectorButtonGap", !0),
						f = t.getOrient().index,
						p = 0 === f ? "width" : "height",
						g = 0 === f ? "height" : "width",
						m = 0 === f ? "y" : "x";
					"end" === o ? c[f] += l[p] + d : u[f] += h[p] + d, c[1 - f] += l[g] / 2 - h[g] / 2, s.attr("position", c), r.attr(
						"position", u);
					var v = {
						x: 0,
						y: 0
					};
					return v[p] = l[p] + d + h[p], v[g] = Math.max(l[g], h[g]), v[m] = Math.min(0, h[m] + c[1 - f]), v
				}
				return r.attr("position", u), this.group.getBoundingRect()
			},
			remove: function() {
				this.getContentGroup().removeAll(), this._isFirstRender = !0
			}
		});

	function aC(t, e, i, n, a, o) {
		var r;
		return "line" !== e && e.indexOf("empty") < 0 ? (r = i.getItemStyle(), t.style.stroke = n, o || (r.stroke = a)) : r =
			i.getItemStyle(["borderWidth", "borderColor"]), t.setStyle(r)
	}

	function oC(t, e) {
		e.dispatchAction({
			type: "legendToggleSelect",
			name: t
		})
	}

	function rC(t, e, i, n) {
		var a = i.getZr().storage.getDisplayList()[0];
		a && a.useHoverLayer || i.dispatchAction({
			type: "highlight",
			seriesName: t,
			name: e,
			excludeSeriesId: n
		})
	}

	function sC(t, e, i, n) {
		var a = i.getZr().storage.getDisplayList()[0];
		a && a.useHoverLayer || i.dispatchAction({
			type: "downplay",
			seriesName: t,
			name: e,
			excludeSeriesId: n
		})
	}
	Qd(cd.PROCESSOR.SERIES_FILTER, function(t) {
		var i = t.findComponents({
			mainType: "legend"
		});
		i && i.length && t.filterSeries(function(t) {
			for (var e = 0; e < i.length; e++)
				if (!i[e].isSelected(t.name)) return !1;
			return !0
		})
	}), fu.registerSubTypeDefaulter("legend", function() {
		return "plain"
	});
	var lC = JD.extend({
		type: "legend.scroll",
		setScrollDataIndex: function(t) {
			this.option.scrollDataIndex = t
		},
		defaultOption: {
			scrollDataIndex: 0,
			pageButtonItemGap: 5,
			pageButtonGap: null,
			pageButtonPosition: "end",
			pageFormatter: "{current}/{total}",
			pageIcons: {
				horizontal: ["M0,0L12,-10L12,10z", "M0,0L-12,-10L-12,10z"],
				vertical: ["M0,0L20,0L10,-20z", "M0,0L20,0L10,20z"]
			},
			pageIconColor: "#a6a6a6",
			pageIconInactiveColor: "#aaa",
			pageIconSize: 15,
			pageTextStyle: {
				color: "#333"
			},
			animationDurationUpdate: 800
		},
		init: function(t, e, i, n) {
			var a = su(t);
			lC.superCall(this, "init", t, e, i, n), uC(this, t, a)
		},
		mergeOption: function(t, e) {
			lC.superCall(this, "mergeOption", t, e), uC(this, this.option, t)
		}
	});

	function uC(t, e, i) {
		var n = [1, 1];
		n[t.getOrient().index] = 0, ru(e, i, {
			type: "box",
			ignoreSize: n
		})
	}
	var hC = Si,
		cC = ["width", "height"],
		dC = ["x", "y"],
		fC = nC.extend({
			type: "legend.scroll",
			newlineDisabled: !0,
			init: function() {
				fC.superCall(this, "init"), this._currentIndex = 0, this.group.add(this._containerGroup = new hC), this._containerGroup
					.add(this.getContentGroup()), this.group.add(this._controllerGroup = new hC), this._showController
			},
			resetInner: function() {
				fC.superCall(this, "resetInner"), this._controllerGroup.removeAll(), this._containerGroup.removeClipPath(), this
					._containerGroup.__rectSize = null
			},
			renderInner: function(t, a, e, o, i, n, r) {
				var s = this;
				fC.superCall(this, "renderInner", t, a, e, o, i, n, r);
				var l = this._controllerGroup,
					u = a.get("pageIconSize", !0);
				k(u) || (u = [u, u]), c("pagePrev", 0);
				var h = a.getModel("pageTextStyle");

				function c(t, e) {
					var i = t + "DataIndex",
						n = el(a.get("pageIcons", !0)[a.getOrient().name][e], {
							onclick: T(s._pageGo, s, i, a, o)
						}, {
							x: -u[0] / 2,
							y: -u[1] / 2,
							width: u[0],
							height: u[1]
						});
					n.name = t, l.add(n)
				}
				l.add(new Dr({
					name: "pageText",
					style: {
						textFill: h.getTextColor(),
						font: h.getFont(),
						textVerticalAlign: "middle",
						textAlign: "center"
					},
					silent: !0
				})), c("pageNext", 1)
			},
			layoutInner: function(t, e, i, n, a, o) {
				var r = this.getSelectorGroup(),
					s = t.getOrient().index,
					l = cC[s],
					u = dC[s],
					h = cC[1 - s],
					c = dC[1 - s];
				a && nu("horizontal", r, t.get("selectorItemGap", !0));
				var d = t.get("selectorButtonGap", !0),
					f = r.getBoundingRect(),
					p = [-f.x, -f.y],
					g = D(i);
				a && (g[l] = i[l] - f[l] - d);
				var m = this._layoutContentAndController(t, n, g, s, l, h, c);
				if (a) {
					if ("end" === o) p[s] += m[l] + d;
					else {
						var v = f[l] + d;
						p[s] -= v, m[u] -= v
					}
					m[l] += f[l] + d, p[1 - s] += m[c] + m[h] / 2 - f[h] / 2, m[h] = Math.max(m[h], f[h]), m[c] = Math.min(m[c], f[
						c] + p[1 - s]), r.attr("position", p)
				}
				return m
			},
			_layoutContentAndController: function(t, e, i, n, a, o, r) {
				var s = this.getContentGroup(),
					l = this._containerGroup,
					u = this._controllerGroup;
				nu(t.get("orient"), s, t.get("itemGap"), n ? i.width : null, n ? null : i.height), nu("horizontal", u, t.get(
					"pageButtonItemGap", !0));
				var h = s.getBoundingRect(),
					c = u.getBoundingRect(),
					d = this._showController = h[a] > i[a],
					f = [-h.x, -h.y];
				e || (f[n] = s.position[n]);
				var p = [0, 0],
					g = [-c.x, -c.y],
					m = H(t.get("pageButtonGap", !0), t.get("itemGap", !0));
				d && ("end" === t.get("pageButtonPosition", !0) ? g[n] += i[a] - c[a] : p[n] += c[a] + m);
				g[1 - n] += h[o] / 2 - c[o] / 2, s.attr("position", f), l.attr("position", p), u.attr("position", g);
				var v = {
					x: 0,
					y: 0
				};
				if (v[a] = d ? i[a] : h[a], v[o] = Math.max(h[o], c[o]), v[r] = Math.min(0, c[r] + g[1 - n]), l.__rectSize = i[a],
					d) {
					var y = {
						x: 0,
						y: 0
					};
					y[a] = Math.max(i[a] - c[a] - m, 0), y[o] = v[o], l.setClipPath(new Hr({
						shape: y
					})), l.__rectSize = y[a]
				} else u.eachChild(function(t) {
					t.attr({
						invisible: !0,
						silent: !0
					})
				});
				var x = this._getPageInfo(t);
				return null != x.pageIndex && js(s, {
					position: x.contentPosition
				}, d && t), this._updatePageInfoView(t, x), v
			},
			_pageGo: function(t, e, i) {
				var n = this._getPageInfo(e)[t];
				null != n && i.dispatchAction({
					type: "legendScroll",
					scrollDataIndex: n,
					legendId: e.id
				})
			},
			_updatePageInfoView: function(n, a) {
				var o = this._controllerGroup;
				E(["pagePrev", "pageNext"], function(t) {
					var e = null != a[t + "DataIndex"],
						i = o.childOfName(t);
					i && (i.setStyle("fill", e ? n.get("pageIconColor", !0) : n.get("pageIconInactiveColor", !0)), i.cursor = e ?
						"pointer" : "default")
				});
				var t = o.childOfName("pageText"),
					e = n.get("pageFormatter"),
					i = a.pageIndex,
					r = null != i ? i + 1 : 0,
					s = a.pageCount;
				t && e && t.setStyle("text", R(e) ? e.replace("{current}", r).replace("{total}", s) : e({
					current: r,
					total: s
				}))
			},
			_getPageInfo: function(t) {
				var e = t.get("scrollDataIndex", !0),
					i = this.getContentGroup(),
					n = this._containerGroup.__rectSize,
					a = t.getOrient().index,
					o = cC[a],
					r = dC[a],
					s = this._findTargetItemIndex(e),
					l = i.children(),
					u = l[s],
					h = l.length,
					c = h ? 1 : 0,
					d = {
						contentPosition: i.position.slice(),
						pageCount: c,
						pageIndex: c - 1,
						pagePrevDataIndex: null,
						pageNextDataIndex: null
					};
				if (!u) return d;
				var f = y(u);
				d.contentPosition[a] = -f.s;
				for (var p = s + 1, g = f, m = f, v = null; p <= h; ++p)(!(v = y(l[p])) && m.e > g.s + n || v && !x(v, g.s)) &&
					(g = m.i > g.i ? m : v) && (null == d.pageNextDataIndex && (d.pageNextDataIndex = g.i), ++d.pageCount), m = v;
				for (p = s - 1, g = f, m = f, v = null; - 1 <= p; --p)(v = y(l[p])) && x(m, v.s) || !(g.i < m.i) || (m = g, null ==
					d.pagePrevDataIndex && (d.pagePrevDataIndex = g.i), ++d.pageCount, ++d.pageIndex), g = v;
				return d;

				function y(t) {
					if (t) {
						var e = t.getBoundingRect(),
							i = e[r] + t.position[a];
						return {
							s: i,
							e: i + e[o],
							i: t.__legendDataIndex
						}
					}
				}

				function x(t, e) {
					return t.e >= e && t.s <= e + n
				}
			},
			_findTargetItemIndex: function(n) {
				var a, o, t = this.getContentGroup();
				return this._showController && t.eachChild(function(t, e) {
					var i = t.__legendDataIndex;
					null == o && null != i && (o = e), i === n && (a = e)
				}), null != a ? a : o
			}
		});
	tf("legendScroll", "legendscroll", function(t, e) {
		var i = t.scrollDataIndex;
		null != i && e.eachComponent({
			mainType: "legend",
			subType: "scroll",
			query: t
		}, function(t) {
			t.setScrollDataIndex(i)
		})
	});
	_T.extend({
		type: "dataZoom.slider",
		layoutMode: "box",
		defaultOption: {
			show: !0,
			right: "ph",
			top: "ph",
			width: "ph",
			height: "ph",
			left: null,
			bottom: null,
			backgroundColor: "rgba(242,242,242,0)",
			dataBackground: {
				lineStyle: {
					color: "#a6a6a6",
					width: .5,
					opacity: .3
				},
				areaStyle: {
					color: "rgba(242,242,242,0.3)",
					opacity: .3
				}
			},
			borderColor: "#ddd",
			fillerColor: "rgba(167,183,204,0.4)",
			handleIcon: "M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z",
			handleSize: "100%",
			handleStyle: {
				color: "#a7b7cc"
			},
			labelPrecision: null,
			labelFormatter: null,
			showDetail: !0,
			showDataShadow: "auto",
			realtime: !0,
			zoomLock: !1,
			textStyle: {
				color: "#333"
			}
		}
	});
	var pC = Hr,
		gC = yl,
		mC = wl,
		vC = T,
		yC = E,
		xC = "horizontal",
		_C = "vertical",
		wC = ["line", "bar", "candlestick", "scatter"],
		bC = ST.extend({
			type: "dataZoom.slider",
			init: function(t, e) {
				this._displayables = {}, this._orient, this._range, this._handleEnds, this._size, this._handleWidth, this._handleHeight,
					this._location, this._dragging, this._dataShadowInfo, this.api = e
			},
			render: function(t, e, i, n) {
				bC.superApply(this, "render", arguments), dc(this, "_dispatchZoomAction", this.dataZoomModel.get("throttle"),
					"fixRate"), this._orient = t.get("orient"), !1 !== this.dataZoomModel.get("show") ? (n && "dataZoom" === n.type &&
					n.from === this.uid || this._buildView(), this._updateView()) : this.group.removeAll()
			},
			remove: function() {
				bC.superApply(this, "remove", arguments), fc(this, "_dispatchZoomAction")
			},
			dispose: function() {
				bC.superApply(this, "dispose", arguments), fc(this, "_dispatchZoomAction")
			},
			_buildView: function() {
				var t = this.group;
				t.removeAll(), this._resetLocation(), this._resetInterval();
				var e = this._displayables.barGroup = new Si;
				this._renderBackground(), this._renderHandle(), this._renderDataShadow(), t.add(e), this._positionGroup()
			},
			_resetLocation: function() {
				var t = this.dataZoomModel,
					e = this.api,
					i = this._findCoordRect(),
					n = {
						width: e.getWidth(),
						height: e.getHeight()
					},
					a = this._orient === xC ? {
						right: n.width - i.x - i.width,
						top: n.height - 30 - 7,
						width: i.width,
						height: 30
					} : {
						right: 7,
						top: i.y,
						width: 30,
						height: i.height
					},
					o = su(t.option);
				E(["right", "top", "width", "height"], function(t) {
					"ph" === o[t] && (o[t] = a[t])
				});
				var r = au(o, n, t.padding);
				this._location = {
					x: r.x,
					y: r.y
				}, this._size = [r.width, r.height], this._orient === _C && this._size.reverse()
			},
			_positionGroup: function() {
				var t = this.group,
					e = this._location,
					i = this._orient,
					n = this.dataZoomModel.getFirstTargetAxisModel(),
					a = n && n.get("inverse"),
					o = this._displayables.barGroup,
					r = (this._dataShadowInfo || {}).otherAxisInverse;
				o.attr(i !== xC || a ? i === xC && a ? {
					scale: r ? [-1, 1] : [-1, -1]
				} : i !== _C || a ? {
					scale: r ? [-1, -1] : [-1, 1],
					rotation: Math.PI / 2
				} : {
					scale: r ? [1, -1] : [1, 1],
					rotation: Math.PI / 2
				} : {
					scale: r ? [1, 1] : [1, -1]
				});
				var s = t.getBoundingRect([o]);
				t.attr("position", [e.x - s.x, e.y - s.y])
			},
			_getViewExtent: function() {
				return [0, this._size[0]]
			},
			_renderBackground: function() {
				var t = this.dataZoomModel,
					e = this._size,
					i = this._displayables.barGroup;
				i.add(new pC({
					silent: !0,
					shape: {
						x: 0,
						y: 0,
						width: e[0],
						height: e[1]
					},
					style: {
						fill: t.get("backgroundColor")
					},
					z2: -40
				})), i.add(new pC({
					shape: {
						x: 0,
						y: 0,
						width: e[0],
						height: e[1]
					},
					style: {
						fill: "transparent"
					},
					z2: 0,
					onclick: T(this._onClickPanelClick, this)
				}))
			},
			_renderDataShadow: function() {
				var t = this._dataShadowInfo = this._prepareDataShadowInfo();
				if (t) {
					var e = this._size,
						i = t.series,
						n = i.getRawData(),
						a = i.getShadowDim ? i.getShadowDim() : t.otherDim;
					if (null != a) {
						var o = n.getDataExtent(a),
							r = .3 * (o[1] - o[0]);
						o = [o[0] - r, o[1] + r];
						var s, l = [0, e[1]],
							u = [0, e[0]],
							h = [
								[e[0], 0],
								[0, 0]
							],
							c = [],
							d = u[1] / (n.count() - 1),
							f = 0,
							p = Math.round(n.count() / e[0]);
						n.each([a], function(t, e) {
							if (0 < p && e % p) f += d;
							else {
								var i = null == t || isNaN(t) || "" === t,
									n = i ? 0 : gC(t, o, l, !0);
								i && !s && e ? (h.push([h[h.length - 1][0], 0]), c.push([c[c.length - 1][0], 0])) : !i && s && (h.push([f,
									0
								]), c.push([f, 0])), h.push([f, n]), c.push([f, n]), f += d, s = i
							}
						});
						var g = this.dataZoomModel;
						this._displayables.barGroup.add(new Rr({
							shape: {
								points: h
							},
							style: C({
								fill: g.get("dataBackgroundColor")
							}, g.getModel("dataBackground.areaStyle").getAreaStyle()),
							silent: !0,
							z2: -20
						})), this._displayables.barGroup.add(new zr({
							shape: {
								points: c
							},
							style: g.getModel("dataBackground.lineStyle").getLineStyle(),
							silent: !0,
							z2: -19
						}))
					}
				}
			},
			_prepareDataShadowInfo: function() {
				var t = this.dataZoomModel,
					s = t.get("showDataShadow");
				if (!1 !== s) {
					var l, u = this.ecModel;
					return t.eachTargetAxis(function(o, r) {
						E(t.getAxisProxy(o.name, r).getTargetSeriesModels(), function(t) {
							if (!(l || !0 !== s && _(wC, t.get("type")) < 0)) {
								var e, i = u.getComponent(o.axis, r).axis,
									n = function(t) {
										return {
											x: "y",
											y: "x",
											radius: "angle",
											angle: "radius"
										} [t]
									}(o.name),
									a = t.coordinateSystem;
								null != n && a.getOtherAxis && (e = a.getOtherAxis(i).inverse), n = t.getData().mapDimension(n), l = {
									thisAxis: i,
									series: t,
									thisDim: o.name,
									otherDim: n,
									otherAxisInverse: e
								}
							}
						}, this)
					}, this), l
				}
			},
			_renderHandle: function() {
				var t = this._displayables,
					o = t.handles = [],
					r = t.handleLabels = [],
					s = this._displayables.barGroup,
					e = this._size,
					l = this.dataZoomModel;
				s.add(t.filler = new pC({
					draggable: !0,
					cursor: SC(this._orient),
					drift: vC(this._onDragMove, this, "all"),
					onmousemove: function(t) {
						Ft(t.event)
					},
					ondragstart: vC(this._showDataInfo, this, !0),
					ondragend: vC(this._onDragEnd, this),
					onmouseover: vC(this._showDataInfo, this, !0),
					onmouseout: vC(this._showDataInfo, this, !1),
					style: {
						fill: l.get("fillerColor"),
						textPosition: "inside"
					}
				})), s.add(new pC({
					silent: !0,
					subPixelOptimize: !0,
					shape: {
						x: 0,
						y: 0,
						width: e[0],
						height: e[1]
					},
					style: {
						stroke: l.get("dataBackgroundColor") || l.get("borderColor"),
						lineWidth: 1,
						fill: "rgba(0,0,0,0)"
					}
				})), yC([0, 1], function(t) {
					var e = el(l.get("handleIcon"), {
							cursor: SC(this._orient),
							draggable: !0,
							drift: vC(this._onDragMove, this, t),
							onmousemove: function(t) {
								Ft(t.event)
							},
							ondragend: vC(this._onDragEnd, this),
							onmouseover: vC(this._showDataInfo, this, !0),
							onmouseout: vC(this._showDataInfo, this, !1)
						}, {
							x: -1,
							y: 0,
							width: 2,
							height: 2
						}),
						i = e.getBoundingRect();
					this._handleHeight = xl(l.get("handleSize"), this._size[1]), this._handleWidth = i.width / i.height * this._handleHeight,
						e.setStyle(l.getModel("handleStyle").getItemStyle());
					var n = l.get("handleColor");
					null != n && (e.style.fill = n), s.add(o[t] = e);
					var a = l.textStyleModel;
					this.group.add(r[t] = new Dr({
						silent: !0,
						invisible: !0,
						style: {
							x: 0,
							y: 0,
							text: "",
							textVerticalAlign: "middle",
							textAlign: "center",
							textFill: a.getTextColor(),
							textFont: a.getFont()
						},
						z2: 10
					}))
				}, this)
			},
			_resetInterval: function() {
				var t = this._range = this.dataZoomModel.getPercentRange(),
					e = this._getViewExtent();
				this._handleEnds = [gC(t[0], [0, 100], e, !0), gC(t[1], [0, 100], e, !0)]
			},
			_updateInterval: function(t, e) {
				var i = this.dataZoomModel,
					n = this._handleEnds,
					a = this._getViewExtent(),
					o = i.findRepresentativeAxisProxy().getMinMaxSpan(),
					r = [0, 100];
				ww(e, n, a, i.get("zoomLock") ? "all" : t, null != o.minSpan ? gC(o.minSpan, r, a, !0) : null, null != o.maxSpan ?
					gC(o.maxSpan, r, a, !0) : null);
				var s = this._range,
					l = this._range = mC([gC(n[0], a, r, !0), gC(n[1], a, r, !0)]);
				return !s || s[0] !== l[0] || s[1] !== l[1]
			},
			_updateView: function(t) {
				var n = this._displayables,
					a = this._handleEnds,
					e = mC(a.slice()),
					o = this._size;
				yC([0, 1], function(t) {
					var e = n.handles[t],
						i = this._handleHeight;
					e.attr({
						scale: [i / 2, i / 2],
						position: [a[t], o[1] / 2 - i / 2]
					})
				}, this), n.filler.setShape({
					x: e[0],
					y: 0,
					width: e[1] - e[0],
					height: o[1]
				}), this._updateDataInfo(t)
			},
			_updateDataInfo: function(t) {
				var e = this.dataZoomModel,
					o = this._displayables,
					r = o.handleLabels,
					s = this._orient,
					l = ["", ""];
				if (e.get("showDetail")) {
					var i = e.findRepresentativeAxisProxy();
					if (i) {
						var n = i.getAxisModel().axis,
							a = this._range,
							u = t ? i.calculateDataWindow({
								start: a[0],
								end: a[1]
							}).valueWindow : i.getDataValueWindow();
						l = [this._formatLabel(u[0], n), this._formatLabel(u[1], n)]
					}
				}
				var h = mC(this._handleEnds.slice());

				function c(t) {
					var e = Ks(o.handles[t].parent, this.group),
						i = Js(0 === t ? "right" : "left", e),
						n = this._handleWidth / 2 + 5,
						a = $s([h[t] + (0 === t ? -n : n), this._size[1] / 2], e);
					r[t].setStyle({
						x: a[0],
						y: a[1],
						textVerticalAlign: s === xC ? "middle" : i,
						textAlign: s === xC ? i : "center",
						text: l[t]
					})
				}
				c.call(this, 0), c.call(this, 1)
			},
			_formatLabel: function(t, e) {
				var i = this.dataZoomModel,
					n = i.get("labelFormatter"),
					a = i.get("labelPrecision");
				null != a && "auto" !== a || (a = e.getPixelPrecision());
				var o = null == t || isNaN(t) ? "" : "category" === e.type || "time" === e.type ? e.scale.getLabel(Math.round(t)) :
					t.toFixed(Math.min(a, 20));
				return O(n) ? n(t, o) : R(n) ? n.replace("{value}", o) : o
			},
			_showDataInfo: function(t) {
				t = this._dragging || t;
				var e = this._displayables.handleLabels;
				e[0].attr("invisible", !t), e[1].attr("invisible", !t)
			},
			_onDragMove: function(t, e, i) {
				this._dragging = !0;
				var n = $s([e, i], this._displayables.barGroup.getLocalTransform(), !0),
					a = this._updateInterval(t, n[0]),
					o = this.dataZoomModel.get("realtime");
				this._updateView(!o), a && o && this._dispatchZoomAction()
			},
			_onDragEnd: function() {
				this._dragging = !1, this._showDataInfo(!1), this.dataZoomModel.get("realtime") || this._dispatchZoomAction()
			},
			_onClickPanelClick: function(t) {
				var e = this._size,
					i = this._displayables.barGroup.transformCoordToLocal(t.offsetX, t.offsetY);
				if (!(i[0] < 0 || i[0] > e[0] || i[1] < 0 || i[1] > e[1])) {
					var n = this._handleEnds,
						a = (n[0] + n[1]) / 2,
						o = this._updateInterval("all", i[0] - a);
					this._updateView(), o && this._dispatchZoomAction()
				}
			},
			_dispatchZoomAction: function() {
				var t = this._range;
				this.api.dispatchAction({
					type: "dataZoom",
					from: this.uid,
					dataZoomId: this.dataZoomModel.id,
					start: t[0],
					end: t[1]
				})
			},
			_findCoordRect: function() {
				var i;
				if (yC(this.getTargetCoordInfo(), function(t) {
						if (!i && t.length) {
							var e = t[0].model.coordinateSystem;
							i = e.getRect && e.getRect()
						}
					}), !i) {
					var t = this.api.getWidth(),
						e = this.api.getHeight();
					i = {
						x: .2 * t,
						y: .2 * e,
						width: .6 * t,
						height: .6 * e
					}
				}
				return i
			}
		});

	function SC(t) {
		return "vertical" === t ? "ns-resize" : "ew-resize"
	}
	_T.extend({
		type: "dataZoom.inside",
		defaultOption: {
			disabled: !1,
			zoomLock: !1,
			zoomOnMouseWheel: !0,
			moveOnMouseMove: !0,
			moveOnMouseWheel: !1,
			preventDefaultMouseMove: !0
		}
	});
	var MC = "\0_ec_dataZoom_roams";

	function IC(t, n) {
		var e = TC(t),
			a = n.dataZoomId,
			o = n.coordId;
		E(e, function(t, e) {
			var i = t.dataZoomInfos;
			i[a] && _(n.allCoordIds, o) < 0 && (delete i[a], t.count--)
		}), DC(e);
		var i = e[o];
		i || ((i = e[o] = {
			coordId: o,
			dataZoomInfos: {},
			count: 0
		}).controller = function(t, r) {
			var e = new uy(t.getZr());
			return E(["pan", "zoom", "scrollMove"], function(o) {
				e.on(o, function(n) {
					var a = [];
					E(r.dataZoomInfos, function(t) {
						if (n.isAvailableBehavior(t.dataZoomModel.option)) {
							var e = (t.getRange || {})[o],
								i = e && e(r.controller, n);
							!t.dataZoomModel.get("disabled", !0) && i && a.push({
								dataZoomId: t.dataZoomId,
								start: i[0],
								end: i[1]
							})
						}
					}), a.length && r.dispatchAction(a)
				})
			}), e
		}(t, i), i.dispatchAction = A(CC, t)), i.dataZoomInfos[a] || i.count++, i.dataZoomInfos[a] = n;
		var r = function(t) {
			var n, a = {
					type_true: 2,
					type_move: 1,
					type_false: 0,
					type_undefined: -1
				},
				o = !0;
			return E(t, function(t) {
				var e = t.dataZoomModel,
					i = !e.get("disabled", !0) && (!e.get("zoomLock", !0) || "move");
				a["type_" + n] < a["type_" + i] && (n = i), o &= e.get("preventDefaultMouseMove", !0)
			}), {
				controlType: n,
				opt: {
					zoomOnMouseWheel: !0,
					moveOnMouseMove: !0,
					moveOnMouseWheel: !0,
					preventDefaultMouseMove: !!o
				}
			}
		}(i.dataZoomInfos);
		i.controller.enable(r.controlType, r.opt), i.controller.setPointerChecker(n.containsPoint), dc(i, "dispatchAction",
			n.dataZoomModel.get("throttle", !0), "fixRate")
	}

	function AC(t) {
		return t.type + "\0_" + t.id
	}

	function TC(t) {
		var e = t.getZr();
		return e[MC] || (e[MC] = {})
	}

	function DC(i) {
		E(i, function(t, e) {
			t.count || (t.controller.dispose(), delete i[e])
		})
	}

	function CC(t, e) {
		t.dispatchAction({
			type: "dataZoom",
			batch: e
		})
	}
	var LC = T,
		kC = ST.extend({
			type: "dataZoom.inside",
			init: function(t, e) {
				this._range
			},
			render: function(r, t, s, e) {
				kC.superApply(this, "render", arguments), this._range = r.getPercentRange(), E(this.getTargetCoordInfo(),
					function(t, a) {
						var o = N(t, function(t) {
							return AC(t.model)
						});
						E(t, function(e) {
							var n = e.model,
								i = {};
							E(["pan", "zoom", "scrollMove"], function(t) {
								i[t] = LC(PC[t], this, e, a)
							}, this), IC(s, {
								coordId: AC(n),
								allCoordIds: o,
								containsPoint: function(t, e, i) {
									return n.coordinateSystem.containPoint([e, i])
								},
								dataZoomId: r.id,
								dataZoomModel: r,
								getRange: i
							})
						}, this)
					}, this)
			},
			dispose: function() {
				! function(t, i) {
					var e = TC(t);
					E(e, function(t) {
						t.controller.dispose();
						var e = t.dataZoomInfos;
						e[i] && (delete e[i], t.count--)
					}), DC(e)
				}(this.api, this.dataZoomModel.id), kC.superApply(this, "dispose", arguments), this._range = null
			}
		}),
		PC = {
			zoom: function(t, e, i, n) {
				var a = this._range,
					o = a.slice(),
					r = t.axisModels[0];
				if (r) {
					var s = EC[e](null, [n.originX, n.originY], r, i, t),
						l = (0 < s.signal ? s.pixelStart + s.pixelLength - s.pixel : s.pixel - s.pixelStart) / s.pixelLength * (o[1] -
							o[0]) + o[0],
						u = Math.max(1 / n.scale, 0);
					o[0] = (o[0] - l) * u + l, o[1] = (o[1] - l) * u + l;
					var h = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();
					return ww(0, o, [0, 100], 0, h.minSpan, h.maxSpan), this._range = o, a[0] !== o[0] || a[1] !== o[1] ? o : void 0
				}
			},
			pan: NC(function(t, e, i, n, a, o) {
				var r = EC[n]([o.oldX, o.oldY], [o.newX, o.newY], e, a, i);
				return r.signal * (t[1] - t[0]) * r.pixel / r.pixelLength
			}),
			scrollMove: NC(function(t, e, i, n, a, o) {
				return EC[n]([0, 0], [o.scrollDelta, o.scrollDelta], e, a, i).signal * (t[1] - t[0]) * o.scrollDelta
			})
		};

	function NC(l) {
		return function(t, e, i, n) {
			var a = this._range,
				o = a.slice(),
				r = t.axisModels[0];
			if (r) {
				var s = l(o, r, t, e, i, n);
				return ww(s, o, [0, 100], "all"), this._range = o, a[0] !== o[0] || a[1] !== o[1] ? o : void 0
			}
		}
	}

	function OC(t) {
		var e = t && t.visualMap;
		k(e) || (e = e ? [e] : []), RC(e, function(t) {
			if (t) {
				zC(t, "splitList") && !zC(t, "pieces") && (t.pieces = t.splitList, delete t.splitList);
				var e = t.pieces;
				e && k(e) && RC(e, function(t) {
					z(t) && (zC(t, "start") && !zC(t, "min") && (t.min = t.start), zC(t, "end") && !zC(t, "max") && (t.max = t.end))
				})
			}
		})
	}
	var EC = {
			grid: function(t, e, i, n, a) {
				var o = i.axis,
					r = {},
					s = a.model.coordinateSystem.getRect();
				return t = t || [0, 0], "x" === o.dim ? (r.pixel = e[0] - t[0], r.pixelLength = s.width, r.pixelStart = s.x, r.signal =
					o.inverse ? 1 : -1) : (r.pixel = e[1] - t[1], r.pixelLength = s.height, r.pixelStart = s.y, r.signal = o.inverse ?
					-1 : 1), r
			},
			polar: function(t, e, i, n, a) {
				var o = i.axis,
					r = {},
					s = a.model.coordinateSystem,
					l = s.getRadiusAxis().getExtent(),
					u = s.getAngleAxis().getExtent();
				return t = t ? s.pointToCoord(t) : [0, 0], e = s.pointToCoord(e), "radiusAxis" === i.mainType ? (r.pixel = e[0] -
					t[0], r.pixelLength = l[1] - l[0], r.pixelStart = l[0], r.signal = o.inverse ? 1 : -1) : (r.pixel = e[1] - t[1],
					r.pixelLength = u[1] - u[0], r.pixelStart = u[0], r.signal = o.inverse ? -1 : 1), r
			},
			singleAxis: function(t, e, i, n, a) {
				var o = i.axis,
					r = a.model.coordinateSystem.getRect(),
					s = {};
				return t = t || [0, 0], "horizontal" === o.orient ? (s.pixel = e[0] - t[0], s.pixelLength = r.width, s.pixelStart =
					r.x, s.signal = o.inverse ? 1 : -1) : (s.pixel = e[1] - t[1], s.pixelLength = r.height, s.pixelStart = r.y, s.signal =
					o.inverse ? -1 : 1), s
			}
		},
		RC = E;

	function zC(t, e) {
		return t && t.hasOwnProperty && t.hasOwnProperty(e)
	}
	fu.registerSubTypeDefaulter("visualMap", function(t) {
		return t.categories || (t.pieces ? 0 < t.pieces.length : 0 < t.splitNumber) && !t.calculable ? "piecewise" :
			"continuous"
	});
	var BC = cd.VISUAL.COMPONENT;

	function VC(t, e, i, n) {
		for (var a = e.targetVisuals[n], o = Bx.prepareVisualTypes(a), r = {
				color: t.getData().getVisual("color")
			}, s = 0, l = o.length; s < l; s++) {
			var u = o[s],
				h = a["opacity" === u ? "__alphaForOpacity" : u];
			h && h.applyVisual(i, c, d)
		}
		return r.color;

		function c(t) {
			return r[t]
		}

		function d(t, e) {
			r[t] = e
		}
	}
	af(BC, {
		createOnAllSeries: !0,
		reset: function(i, t) {
			var n = [];
			return t.eachComponent("visualMap", function(t) {
				var e = i.pipelineContext;
				!t.isTargetSeries(i) || e && e.large || n.push(function(t, f, p, g) {
					var m = {};
					return E(t, function(t) {
						var e = Bx.prepareVisualTypes(f[t]);
						m[t] = e
					}), {
						progress: function(t, i) {
							function e(t) {
								return i.getItemVisual(a, t)
							}

							function n(t, e) {
								i.setItemVisual(a, t, e)
							}
							var a;
							for (null != g && (g = i.getDimension(g)); null != (a = t.next());) {
								var o = i.getRawDataItem(a);
								if (!o || !1 !== o.visualMap)
									for (var r = null != g ? i.get(g, a, !0) : a, s = p(r), l = f[s], u = m[s], h = 0, c = u.length; h <
										c; h++) {
										var d = u[h];
										l[d] && l[d].applyVisual(r, e, n)
									}
							}
						}
					}
				}(t.stateList, t.targetVisuals, T(t.getValueState, t), t.getDataDimension(i.getData())))
			}), n
		}
	}), af(BC, {
		createOnAllSeries: !0,
		reset: function(a, t) {
			var o = a.getData(),
				r = [];
			t.eachComponent("visualMap", function(t) {
				if (t.isTargetSeries(a)) {
					var e = t.getVisualMeta(T(VC, null, a, t)) || {
							stops: [],
							outerColors: []
						},
						i = t.getDataDimension(o),
						n = o.getDimensionInfo(i);
					null != n && (e.dimension = n.index, r.push(e))
				}
			}), a.getData().setVisual("visualMeta", r)
		}
	});
	var GC = function(t, e, i) {
			var n = D((FC[t] || {})[e]);
			return i && k(n) ? n[n.length - 1] : n
		},
		FC = {
			color: {
				active: ["#006edd", "#e0ffff"],
				inactive: ["rgba(0,0,0,0)"]
			},
			colorHue: {
				active: [0, 360],
				inactive: [0, 0]
			},
			colorSaturation: {
				active: [.3, 1],
				inactive: [0, 0]
			},
			colorLightness: {
				active: [.9, .5],
				inactive: [0, 0]
			},
			colorAlpha: {
				active: [.3, 1],
				inactive: [0, 0]
			},
			opacity: {
				active: [.3, 1],
				inactive: [0, 0]
			},
			symbol: {
				active: ["circle", "roundRect", "diamond"],
				inactive: ["none"]
			},
			symbolSize: {
				active: [10, 50],
				inactive: [0, 0]
			}
		},
		WC = Bx.mapVisual,
		HC = Bx.eachVisual,
		ZC = k,
		UC = E,
		XC = wl,
		YC = yl,
		jC = sf({
			type: "visualMap",
			dependencies: ["series"],
			stateList: ["inRange", "outOfRange"],
			replacableOptionKeys: ["inRange", "outOfRange", "target", "controller", "color"],
			dataBound: [-1 / 0, 1 / 0],
			layoutMode: {
				type: "box",
				ignoreSize: !0
			},
			defaultOption: {
				show: !0,
				zlevel: 0,
				z: 4,
				seriesIndex: "all",
				min: 0,
				max: 200,
				dimension: null,
				inRange: null,
				outOfRange: null,
				left: 0,
				right: null,
				top: null,
				bottom: 0,
				itemWidth: null,
				itemHeight: null,
				inverse: !1,
				orient: "vertical",
				backgroundColor: "rgba(0,0,0,0)",
				borderColor: "#ccc",
				contentColor: "#5793f3",
				inactiveColor: "#aaa",
				borderWidth: 0,
				padding: 5,
				textGap: 10,
				precision: 0,
				color: null,
				formatter: null,
				text: null,
				textStyle: {
					color: "#333"
				}
			},
			init: function(t, e, i) {
				this._dataExtent, this.targetVisuals = {}, this.controllerVisuals = {}, this.textStyleModel, this.itemSize, this
					.mergeDefaultAndTheme(t, i)
			},
			optionUpdated: function(t, e) {
				var i = this.option;
				v.canvasSupported || (i.realtime = !1), e || qT(i, t, this.replacableOptionKeys), this.textStyleModel = this.getModel(
					"textStyle"), this.resetItemSize(), this.completeVisualOption()
			},
			resetVisual: function(t) {
				var e = this.stateList;
				t = T(t, this), this.controllerVisuals = jT(this.option.controller, e, t), this.targetVisuals = jT(this.option.target,
					e, t)
			},
			getTargetSeriesIndices: function() {
				var t = this.option.seriesIndex,
					i = [];
				return null == t || "all" === t ? this.ecModel.eachSeries(function(t, e) {
					i.push(e)
				}) : i = wa(t), i
			},
			eachTargetSeries: function(e, i) {
				E(this.getTargetSeriesIndices(), function(t) {
					e.call(i, this.ecModel.getSeriesByIndex(t))
				}, this)
			},
			isTargetSeries: function(e) {
				var i = !1;
				return this.eachTargetSeries(function(t) {
					t === e && (i = !0)
				}), i
			},
			formatValueText: function(t, e, i) {
				var n, a, o = this.option,
					r = o.precision,
					s = this.dataBound,
					l = o.formatter;
				return i = i || ["<", ">"], k(t) && (t = t.slice(), n = !0), a = e ? t : n ? [u(t[0]), u(t[1])] : u(t), R(l) ? l
					.replace("{value}", n ? a[0] : a).replace("{value2}", n ? a[1] : a) : O(l) ? n ? l(t[0], t[1]) : l(t) : n ? t[0] ===
					s[0] ? i[0] + " " + a[1] : t[1] === s[1] ? i[1] + " " + a[0] : a[0] + " - " + a[1] : a;

				function u(t) {
					return t === s[0] ? "min" : t === s[1] ? "max" : (+t).toFixed(Math.min(r, 20))
				}
			},
			resetExtent: function() {
				var t = this.option,
					e = XC([t.min, t.max]);
				this._dataExtent = e
			},
			getDataDimension: function(t) {
				var e = this.option.dimension,
					i = t.dimensions;
				if (null != e || i.length) {
					if (null != e) return t.getDimension(e);
					for (var n = t.dimensions, a = n.length - 1; 0 <= a; a--) {
						var o = n[a];
						if (!t.getDimensionInfo(o).isCalculationCoord) return o
					}
				}
			},
			getExtent: function() {
				return this._dataExtent.slice()
			},
			completeVisualOption: function() {
				var t = this.ecModel,
					e = this.option,
					i = {
						inRange: e.inRange,
						outOfRange: e.outOfRange
					},
					n = e.target || (e.target = {}),
					a = e.controller || (e.controller = {});
				m(n, i), m(a, i);
				var u = this.isCategory();

				function o(n) {
					ZC(e.color) && !n.inRange && (n.inRange = {
						color: e.color.slice().reverse()
					}), n.inRange = n.inRange || {
						color: t.get("gradientColor")
					}, UC(this.stateList, function(t) {
						var e = n[t];
						if (R(e)) {
							var i = GC(e, "active", u);
							i ? (n[t] = {}, n[t][e] = i) : delete n[t]
						}
					}, this)
				}
				o.call(this, n), o.call(this, a),
					function(t, e, i) {
						var n = t[e],
							a = t[i];
						n && !a && (a = t[i] = {}, UC(n, function(t, e) {
							if (Bx.isValidType(e)) {
								var i = GC(e, "inactive", u);
								null != i && (a[e] = i, "color" !== e || a.hasOwnProperty("opacity") || a.hasOwnProperty("colorAlpha") ||
									(a.opacity = [0, 0]))
							}
						}))
					}.call(this, n, "inRange", "outOfRange"),
					function(o) {
						var r = (o.inRange || {}).symbol || (o.outOfRange || {}).symbol,
							s = (o.inRange || {}).symbolSize || (o.outOfRange || {}).symbolSize,
							l = this.get("inactiveColor");
						UC(this.stateList, function(t) {
							var e = this.itemSize,
								i = o[t];
							null == (i = i || (o[t] = {
								color: u ? l : [l]
							})).symbol && (i.symbol = r && D(r) || (u ? "roundRect" : ["roundRect"])), null == i.symbolSize && (i.symbolSize =
								s && D(s) || (u ? e[0] : [e[0], e[0]])), i.symbol = WC(i.symbol, function(t) {
								return "none" === t || "square" === t ? "roundRect" : t
							});
							var n = i.symbolSize;
							if (null != n) {
								var a = -1 / 0;
								HC(n, function(t) {
									a < t && (a = t)
								}), i.symbolSize = WC(n, function(t) {
									return YC(t, [0, a], [0, e[0]], !0)
								})
							}
						}, this)
					}.call(this, a)
			},
			resetItemSize: function() {
				this.itemSize = [parseFloat(this.get("itemWidth")), parseFloat(this.get("itemHeight"))]
			},
			isCategory: function() {
				return !!this.option.categories
			},
			setSelected: et,
			getValueState: et,
			getVisualMeta: et
		}),
		qC = [20, 140],
		KC = jC.extend({
			type: "visualMap.continuous",
			defaultOption: {
				align: "auto",
				calculable: !1,
				range: null,
				realtime: !0,
				itemHeight: null,
				itemWidth: null,
				hoverLink: !0,
				hoverLinkDataSize: null,
				hoverLinkOnHandle: null
			},
			optionUpdated: function(t, e) {
				KC.superApply(this, "optionUpdated", arguments), this.resetExtent(), this.resetVisual(function(t) {
					t.mappingMethod = "linear", t.dataExtent = this.getExtent()
				}), this._resetRange()
			},
			resetItemSize: function() {
				KC.superApply(this, "resetItemSize", arguments);
				var t = this.itemSize;
				"horizontal" === this._orient && t.reverse(), null != t[0] && !isNaN(t[0]) || (t[0] = qC[0]), null != t[1] && !
					isNaN(t[1]) || (t[1] = qC[1])
			},
			_resetRange: function() {
				var t = this.getExtent(),
					e = this.option.range;
				!e || e.auto ? (t.auto = 1, this.option.range = t) : k(e) && (e[0] > e[1] && e.reverse(), e[0] = Math.max(e[0],
					t[0]), e[1] = Math.min(e[1], t[1]))
			},
			completeVisualOption: function() {
				jC.prototype.completeVisualOption.apply(this, arguments), E(this.stateList, function(t) {
					var e = this.option.controller[t].symbolSize;
					e && e[0] !== e[1] && (e[0] = 0)
				}, this)
			},
			setSelected: function(t) {
				this.option.range = t.slice(), this._resetRange()
			},
			getSelected: function() {
				var t = this.getExtent(),
					e = wl((this.get("range") || []).slice());
				return e[0] > t[1] && (e[0] = t[1]), e[1] > t[1] && (e[1] = t[1]), e[0] < t[0] && (e[0] = t[0]), e[1] < t[0] &&
					(e[1] = t[0]), e
			},
			getValueState: function(t) {
				var e = this.option.range,
					i = this.getExtent();
				return (e[0] <= i[0] || e[0] <= t) && (e[1] >= i[1] || t <= e[1]) ? "inRange" : "outOfRange"
			},
			findTargetDataIndices: function(n) {
				var a = [];
				return this.eachTargetSeries(function(t) {
					var i = [],
						e = t.getData();
					e.each(this.getDataDimension(e), function(t, e) {
						n[0] <= t && t <= n[1] && i.push(e)
					}, this), a.push({
						seriesId: t.id,
						dataIndex: i
					})
				}, this), a
			},
			getVisualMeta: function(i) {
				var t = $C(this, "outOfRange", this.getExtent()),
					e = $C(this, "inRange", this.option.range.slice()),
					n = [];

				function a(t, e) {
					n.push({
						value: t,
						color: i(t, e)
					})
				}
				for (var o = 0, r = 0, s = e.length, l = t.length; r < l && (!e.length || t[r] <= e[0]); r++) t[r] < e[o] && a(t[
					r], "outOfRange");
				for (var u = 1; o < s; o++, u = 0) u && n.length && a(e[o], "outOfRange"), a(e[o], "inRange");
				for (u = 1; r < l; r++)(!e.length || e[e.length - 1] < t[r]) && (u && (n.length && a(n[n.length - 1].value,
					"outOfRange"), u = 0), a(t[r], "outOfRange"));
				var h = n.length;
				return {
					stops: n,
					outerColors: [h ? n[0].color : "transparent", h ? n[h - 1].color : "transparent"]
				}
			}
		});

	function $C(t, e, i) {
		if (i[0] === i[1]) return i.slice();
		for (var n = (i[1] - i[0]) / 200, a = i[0], o = [], r = 0; r <= 200 && a < i[1]; r++) o.push(a), a += n;
		return o.push(i[1]), o
	}
	var JC = lf({
		type: "visualMap",
		autoPositionValues: {
			left: 1,
			right: 1,
			top: 1,
			bottom: 1
		},
		init: function(t, e) {
			this.ecModel = t, this.api = e, this.visualMapModel
		},
		render: function(t, e, i, n) {
			!1 !== (this.visualMapModel = t).get("show") ? this.doRender.apply(this, arguments) : this.group.removeAll()
		},
		renderBackground: function(t) {
			var e = this.visualMapModel,
				i = Vl(e.get("padding") || 0),
				n = t.getBoundingRect();
			t.add(new Hr({
				z2: -1,
				silent: !0,
				shape: {
					x: n.x - i[3],
					y: n.y - i[0],
					width: n.width + i[3] + i[1],
					height: n.height + i[0] + i[2]
				},
				style: {
					fill: e.get("backgroundColor"),
					stroke: e.get("borderColor"),
					lineWidth: e.get("borderWidth")
				}
			}))
		},
		getControllerVisual: function(i, n, a) {
			var t = (a = a || {}).forceState,
				e = this.visualMapModel,
				o = {};
			if ("symbol" === n && (o.symbol = e.get("itemSymbol")), "color" === n) {
				var r = e.get("contentColor");
				o.color = r
			}

			function s(t) {
				return o[t]
			}

			function l(t, e) {
				o[t] = e
			}
			var u = e.controllerVisuals[t || e.getValueState(i)];
			return E(Bx.prepareVisualTypes(u), function(t) {
				var e = u[t];
				a.convertOpacityToAlpha && "opacity" === t && (t = "colorAlpha", e = u.__alphaForOpacity), Bx.dependsOn(t, n) &&
					e && e.applyVisual(i, s, l)
			}), o[n]
		},
		positionGroup: function(t) {
			var e = this.visualMapModel,
				i = this.api;
			ou(t, e.getBoxLayoutParams(), {
				width: i.getWidth(),
				height: i.getHeight()
			})
		},
		doRender: et
	});

	function QC(t, e, i) {
		var n = t.option,
			a = n.align;
		if (null != a && "auto" !== a) return a;
		for (var o = {
				width: e.getWidth(),
				height: e.getHeight()
			}, r = "horizontal" === n.orient ? 1 : 0, s = [
				["left", "right", "width"],
				["top", "bottom", "height"]
			], l = s[r], u = [0, null, 10], h = {}, c = 0; c < 3; c++) h[s[1 - r][c]] = u[c], h[l[c]] = 2 === c ? i[0] : n[l[c]];
		var d = [
				["x", "width", 3],
				["y", "height", 0]
			][r],
			f = au(h, o, n.padding);
		return l[(f.margin[d[2]] || 0) + f[d[0]] + .5 * f[d[1]] < .5 * o[d[1]] ? 0 : 1]
	}

	function tL(t, e) {
		return E(t || [], function(t) {
			null != t.dataIndex && (t.dataIndexInside = t.dataIndex, t.dataIndex = null), t.highlightKey = "visualMap" + (e ?
				e.componentIndex : "")
		}), t
	}
	var eL = yl,
		iL = E,
		nL = Math.min,
		aL = Math.max,
		oL = JC.extend({
			type: "visualMap.continuous",
			init: function() {
				oL.superApply(this, "init", arguments), this._shapes = {}, this._dataInterval = [], this._handleEnds = [], this._orient,
					this._useHandle, this._hoverLinkDataIndices = [], this._dragging, this._hovering
			},
			doRender: function(t, e, i, n) {
				n && "selectDataRange" === n.type && n.from === this.uid || this._buildView()
			},
			_buildView: function() {
				this.group.removeAll();
				var t = this.visualMapModel,
					e = this.group;
				this._orient = t.get("orient"), this._useHandle = t.get("calculable"), this._resetInterval(), this._renderBar(e);
				var i = t.get("text");
				this._renderEndsText(e, i, 0), this._renderEndsText(e, i, 1), this._updateView(!0), this.renderBackground(e),
					this._updateView(), this._enableHoverLinkToSeries(), this._enableHoverLinkFromSeries(), this.positionGroup(e)
			},
			_renderEndsText: function(t, e, i) {
				if (e) {
					var n = e[1 - i];
					n = null != n ? n + "" : "";
					var a = this.visualMapModel,
						o = a.get("textGap"),
						r = a.itemSize,
						s = this._shapes.barGroup,
						l = this._applyTransform([r[0] / 2, 0 === i ? -o : r[1] + o], s),
						u = this._applyTransform(0 === i ? "bottom" : "top", s),
						h = this._orient,
						c = this.visualMapModel.textStyleModel;
					this.group.add(new Dr({
						style: {
							x: l[0],
							y: l[1],
							textVerticalAlign: "horizontal" === h ? "middle" : u,
							textAlign: "horizontal" === h ? u : "center",
							text: n,
							textFont: c.getFont(),
							textFill: c.getTextColor()
						}
					}))
				}
			},
			_renderBar: function(t) {
				var e = this.visualMapModel,
					i = this._shapes,
					n = e.itemSize,
					a = this._orient,
					o = this._useHandle,
					r = QC(e, this.api, n),
					s = i.barGroup = this._createBarGroup(r);
				s.add(i.outOfRange = rL()), s.add(i.inRange = rL(null, o ? lL(this._orient) : null, T(this._dragHandle, this,
					"all", !1), T(this._dragHandle, this, "all", !0)));
				var l = e.textStyleModel.getTextRect("国"),
					u = aL(l.width, l.height);
				o && (i.handleThumbs = [], i.handleLabels = [], i.handleLabelPoints = [], this._createHandle(s, 0, n, u, a, r),
					this._createHandle(s, 1, n, u, a, r)), this._createIndicator(s, n, u, a), t.add(s)
			},
			_createHandle: function(t, e, i, n, a) {
				var o = T(this._dragHandle, this, e, !1),
					r = T(this._dragHandle, this, e, !0),
					s = rL(function(t, e) {
						return 0 === t ? [
							[0, 0],
							[e, 0],
							[e, -e]
						] : [
							[0, 0],
							[e, 0],
							[e, e]
						]
					}(e, n), lL(this._orient), o, r);
				s.position[0] = i[0], t.add(s);
				var l = this.visualMapModel.textStyleModel,
					u = new Dr({
						draggable: !0,
						drift: o,
						onmousemove: function(t) {
							Ft(t.event)
						},
						ondragend: r,
						style: {
							x: 0,
							y: 0,
							text: "",
							textFont: l.getFont(),
							textFill: l.getTextColor()
						}
					});
				this.group.add(u);
				var h = ["horizontal" === a ? n / 2 : 1.5 * n, "horizontal" === a ? 0 === e ? -1.5 * n : 1.5 * n : 0 === e ? -n /
						2 : n / 2
					],
					c = this._shapes;
				c.handleThumbs[e] = s, c.handleLabelPoints[e] = h, c.handleLabels[e] = u
			},
			_createIndicator: function(t, e, i, n) {
				var a = rL([
					[0, 0]
				], "move");
				a.position[0] = e[0], a.attr({
					invisible: !0,
					silent: !0
				}), t.add(a);
				var o = this.visualMapModel.textStyleModel,
					r = new Dr({
						silent: !0,
						invisible: !0,
						style: {
							x: 0,
							y: 0,
							text: "",
							textFont: o.getFont(),
							textFill: o.getTextColor()
						}
					});
				this.group.add(r);
				var s = ["horizontal" === n ? i / 2 : 9, 0],
					l = this._shapes;
				l.indicator = a, l.indicatorLabel = r, l.indicatorLabelPoint = s
			},
			_dragHandle: function(t, e, i, n) {
				if (this._useHandle) {
					if (this._dragging = !e, !e) {
						var a = this._applyTransform([i, n], this._shapes.barGroup, !0);
						this._updateInterval(t, a[1]), this._updateView()
					}
					e === !this.visualMapModel.get("realtime") && this.api.dispatchAction({
						type: "selectDataRange",
						from: this.uid,
						visualMapId: this.visualMapModel.id,
						selected: this._dataInterval.slice()
					}), e ? this._hovering || this._clearHoverLinkToSeries() : sL(this.visualMapModel) && this._doHoverLinkToSeries(
						this._handleEnds[t], !1)
				}
			},
			_resetInterval: function() {
				var t = this.visualMapModel,
					e = this._dataInterval = t.getSelected(),
					i = t.getExtent(),
					n = [0, t.itemSize[1]];
				this._handleEnds = [eL(e[0], i, n, !0), eL(e[1], i, n, !0)]
			},
			_updateInterval: function(t, e) {
				e = e || 0;
				var i = this.visualMapModel,
					n = this._handleEnds,
					a = [0, i.itemSize[1]];
				ww(e, n, a, t, 0);
				var o = i.getExtent();
				this._dataInterval = [eL(n[0], a, o, !0), eL(n[1], a, o, !0)]
			},
			_updateView: function(t) {
				var e = this.visualMapModel,
					i = e.getExtent(),
					n = this._shapes,
					a = [0, e.itemSize[1]],
					o = t ? a : this._handleEnds,
					r = this._createBarVisual(this._dataInterval, i, o, "inRange"),
					s = this._createBarVisual(i, i, a, "outOfRange");
				n.inRange.setStyle({
					fill: r.barColor,
					opacity: r.opacity
				}).setShape("points", r.barPoints), n.outOfRange.setStyle({
					fill: s.barColor,
					opacity: s.opacity
				}).setShape("points", s.barPoints), this._updateHandle(o, r)
			},
			_createBarVisual: function(t, e, i, n) {
				var a = {
						forceState: n,
						convertOpacityToAlpha: !0
					},
					o = this._makeColorGradient(t, a),
					r = [this.getControllerVisual(t[0], "symbolSize", a), this.getControllerVisual(t[1], "symbolSize", a)],
					s = this._createBarPoints(i, r);
				return {
					barColor: new Jr(0, 0, 0, 1, o),
					barPoints: s,
					handlesColor: [o[0].color, o[o.length - 1].color]
				}
			},
			_makeColorGradient: function(t, e) {
				var i = [],
					n = (t[1] - t[0]) / 100;
				i.push({
					color: this.getControllerVisual(t[0], "color", e),
					offset: 0
				});
				for (var a = 1; a < 100; a++) {
					var o = t[0] + n * a;
					if (o > t[1]) break;
					i.push({
						color: this.getControllerVisual(o, "color", e),
						offset: a / 100
					})
				}
				return i.push({
					color: this.getControllerVisual(t[1], "color", e),
					offset: 1
				}), i
			},
			_createBarPoints: function(t, e) {
				var i = this.visualMapModel.itemSize;
				return [
					[i[0] - e[0], t[0]],
					[i[0], t[0]],
					[i[0], t[1]],
					[i[0] - e[1], t[1]]
				]
			},
			_createBarGroup: function(t) {
				var e = this._orient,
					i = this.visualMapModel.get("inverse");
				return new Si("horizontal" !== e || i ? "horizontal" === e && i ? {
					scale: "bottom" === t ? [-1, 1] : [1, 1],
					rotation: -Math.PI / 2
				} : "vertical" !== e || i ? {
					scale: "left" === t ? [1, 1] : [-1, 1]
				} : {
					scale: "left" === t ? [1, -1] : [-1, -1]
				} : {
					scale: "bottom" === t ? [1, 1] : [-1, 1],
					rotation: Math.PI / 2
				})
			},
			_updateHandle: function(n, a) {
				if (this._useHandle) {
					var o = this._shapes,
						r = this.visualMapModel,
						s = o.handleThumbs,
						l = o.handleLabels;
					iL([0, 1], function(t) {
						var e = s[t];
						e.setStyle("fill", a.handlesColor[t]), e.position[1] = n[t];
						var i = $s(o.handleLabelPoints[t], Ks(e, this.group));
						l[t].setStyle({
							x: i[0],
							y: i[1],
							text: r.formatValueText(this._dataInterval[t]),
							textVerticalAlign: "middle",
							textAlign: this._applyTransform("horizontal" === this._orient ? 0 === t ? "bottom" : "top" : "left", o.barGroup)
						})
					}, this)
				}
			},
			_showIndicator: function(t, e, i, n) {
				var a = this.visualMapModel,
					o = a.getExtent(),
					r = a.itemSize,
					s = [0, r[1]],
					l = eL(t, o, s, !0),
					u = this._shapes,
					h = u.indicator;
				if (h) {
					h.position[1] = l, h.attr("invisible", !1), h.setShape("points", function(t, e, i, n) {
						return t ? [
							[0, -nL(e, aL(i, 0))],
							[6, 0],
							[0, nL(e, aL(n - i, 0))]
						] : [
							[0, 0],
							[5, -5],
							[5, 5]
						]
					}(!!i, n, l, r[1]));
					var c = this.getControllerVisual(t, "color", {
						convertOpacityToAlpha: !0
					});
					h.setStyle("fill", c);
					var d = $s(u.indicatorLabelPoint, Ks(h, this.group)),
						f = u.indicatorLabel;
					f.attr("invisible", !1);
					var p = this._applyTransform("left", u.barGroup),
						g = this._orient;
					f.setStyle({
						text: (i || "") + a.formatValueText(e),
						textVerticalAlign: "horizontal" === g ? p : "middle",
						textAlign: "horizontal" === g ? "center" : p,
						x: d[0],
						y: d[1]
					})
				}
			},
			_enableHoverLinkToSeries: function() {
				var n = this;
				this._shapes.barGroup.on("mousemove", function(t) {
					if (n._hovering = !0, !n._dragging) {
						var e = n.visualMapModel.itemSize,
							i = n._applyTransform([t.offsetX, t.offsetY], n._shapes.barGroup, !0, !0);
						i[1] = nL(aL(0, i[1]), e[1]), n._doHoverLinkToSeries(i[1], 0 <= i[0] && i[0] <= e[0])
					}
				}).on("mouseout", function() {
					n._hovering = !1, n._dragging || n._clearHoverLinkToSeries()
				})
			},
			_enableHoverLinkFromSeries: function() {
				var t = this.api.getZr();
				this.visualMapModel.option.hoverLink ? (t.on("mouseover", this._hoverLinkFromSeriesMouseOver, this), t.on(
					"mouseout", this._hideIndicator, this)) : this._clearHoverLinkFromSeries()
			},
			_doHoverLinkToSeries: function(t, e) {
				var i = this.visualMapModel,
					n = i.itemSize;
				if (i.option.hoverLink) {
					var a = [0, n[1]],
						o = i.getExtent();
					t = nL(aL(a[0], t), a[1]);
					var r = function(t, e, i) {
							var n = 6,
								a = t.get("hoverLinkDataSize");
							a && (n = eL(a, e, i, !0) / 2);
							return n
						}(i, o, a),
						s = [t - r, t + r],
						l = eL(t, a, o, !0),
						u = [eL(s[0], a, o, !0), eL(s[1], a, o, !0)];
					s[0] < a[0] && (u[0] = -1 / 0), a[1] < s[1] && (u[1] = 1 / 0), e && (u[0] === -1 / 0 ? this._showIndicator(l, u[
						1], "< ", r) : u[1] === 1 / 0 ? this._showIndicator(l, u[0], "> ", r) : this._showIndicator(l, l, "≈ ", r));
					var h = this._hoverLinkDataIndices,
						c = [];
					(e || sL(i)) && (c = this._hoverLinkDataIndices = i.findTargetDataIndices(u));
					var d = function(t, e) {
						var i = {},
							n = {};
						return a(t || [], i), a(e || [], n, i), [o(i), o(n)];

						function a(t, e, i) {
							for (var n = 0, a = t.length; n < a; n++)
								for (var o = t[n].seriesId, r = wa(t[n].dataIndex), s = i && i[o], l = 0, u = r.length; l < u; l++) {
									var h = r[l];
									s && s[h] ? s[h] = null : (e[o] || (e[o] = {}))[h] = 1
								}
						}

						function o(t, e) {
							var i = [];
							for (var n in t)
								if (t.hasOwnProperty(n) && null != t[n])
									if (e) i.push(+n);
									else {
										var a = o(t[n], !0);
										a.length && i.push({
											seriesId: n,
											dataIndex: a
										})
									}
							return i
						}
					}(h, c);
					this._dispatchHighDown("downplay", tL(d[0], i)), this._dispatchHighDown("highlight", tL(d[1], i))
				}
			},
			_hoverLinkFromSeriesMouseOver: function(t) {
				var e = t.target,
					i = this.visualMapModel;
				if (e && null != e.dataIndex) {
					var n = this.ecModel.getSeriesByIndex(e.seriesIndex);
					if (i.isTargetSeries(n)) {
						var a = n.getData(e.dataType),
							o = a.get(i.getDataDimension(a), e.dataIndex, !0);
						isNaN(o) || this._showIndicator(o, o)
					}
				}
			},
			_hideIndicator: function() {
				var t = this._shapes;
				t.indicator && t.indicator.attr("invisible", !0), t.indicatorLabel && t.indicatorLabel.attr("invisible", !0)
			},
			_clearHoverLinkToSeries: function() {
				this._hideIndicator();
				var t = this._hoverLinkDataIndices;
				this._dispatchHighDown("downplay", tL(t, this.visualMapModel)), t.length = 0
			},
			_clearHoverLinkFromSeries: function() {
				this._hideIndicator();
				var t = this.api.getZr();
				t.off("mouseover", this._hoverLinkFromSeriesMouseOver), t.off("mouseout", this._hideIndicator)
			},
			_applyTransform: function(t, e, i, n) {
				var a = Ks(e, n ? null : this.group);
				return ol[k(t) ? "applyTransform" : "transformDirection"](t, a, i)
			},
			_dispatchHighDown: function(t, e) {
				e && e.length && this.api.dispatchAction({
					type: t,
					batch: e
				})
			},
			dispose: function() {
				this._clearHoverLinkFromSeries(), this._clearHoverLinkToSeries()
			},
			remove: function() {
				this._clearHoverLinkFromSeries(), this._clearHoverLinkToSeries()
			}
		});

	function rL(t, e, i, n) {
		return new Rr({
			shape: {
				points: t
			},
			draggable: !!i,
			cursor: e,
			drift: i,
			onmousemove: function(t) {
				Ft(t.event)
			},
			ondragend: n
		})
	}

	function sL(t) {
		var e = t.get("hoverLinkOnHandle");
		return !!(null == e ? t.get("realtime") : e)
	}

	function lL(t) {
		return "vertical" === t ? "ns-resize" : "ew-resize"
	}
	tf({
		type: "selectDataRange",
		event: "dataRangeSelected",
		update: "update"
	}, function(e, t) {
		t.eachComponent({
			mainType: "visualMap",
			query: e
		}, function(t) {
			t.setSelected(e.selected)
		})
	}), Jd(OC);
	var uL = jC.extend({
			type: "visualMap.piecewise",
			defaultOption: {
				selected: null,
				minOpen: !1,
				maxOpen: !1,
				align: "auto",
				itemWidth: 20,
				itemHeight: 14,
				itemSymbol: "roundRect",
				pieceList: null,
				categories: null,
				splitNumber: 5,
				selectedMode: "multiple",
				itemGap: 10,
				hoverLink: !0,
				showLabel: null
			},
			optionUpdated: function(t, e) {
				uL.superApply(this, "optionUpdated", arguments), this._pieceList = [], this.resetExtent();
				var i = this._mode = this._determineMode();
				hL[this._mode].call(this), this._resetSelected(t, e);
				var n = this.option.categories;
				this.resetVisual(function(t, e) {
					"categories" === i ? (t.mappingMethod = "category", t.categories = D(n)) : (t.dataExtent = this.getExtent(),
						t.mappingMethod = "piecewise", t.pieceList = N(this._pieceList, function(t) {
							t = D(t);
							return "inRange" !== e && (t.visual = null), t
						}))
				})
			},
			completeVisualOption: function() {
				var n = this.option,
					i = {},
					t = Bx.listVisualTypes(),
					a = this.isCategory();

				function o(t, e, i) {
					return t && t[e] && (z(t[e]) ? t[e].hasOwnProperty(i) : t[e] === i)
				}
				E(n.pieces, function(e) {
					E(t, function(t) {
						e.hasOwnProperty(t) && (i[t] = 1)
					})
				}), E(i, function(t, e) {
					var i = 0;
					E(this.stateList, function(t) {
						i |= o(n, t, e) || o(n.target, t, e)
					}, this), i || E(this.stateList, function(t) {
						(n[t] || (n[t] = {}))[e] = GC(e, "inRange" === t ? "active" : "inactive", a)
					})
				}, this), jC.prototype.completeVisualOption.apply(this, arguments)
			},
			_resetSelected: function(t, e) {
				var i = this.option,
					n = this._pieceList,
					a = (e ? i : t).selected || {};
				if (i.selected = a, E(n, function(t, e) {
						var i = this.getSelectedMapKey(t);
						a.hasOwnProperty(i) || (a[i] = !0)
					}, this), "single" === i.selectedMode) {
					var o = !1;
					E(n, function(t, e) {
						var i = this.getSelectedMapKey(t);
						a[i] && (o ? a[i] = !1 : o = !0)
					}, this)
				}
			},
			getSelectedMapKey: function(t) {
				return "categories" === this._mode ? t.value + "" : t.index + ""
			},
			getPieceList: function() {
				return this._pieceList
			},
			_determineMode: function() {
				var t = this.option;
				return t.pieces && 0 < t.pieces.length ? "pieces" : this.option.categories ? "categories" : "splitNumber"
			},
			setSelected: function(t) {
				this.option.selected = D(t)
			},
			getValueState: function(t) {
				var e = Bx.findPieceIndex(t, this._pieceList);
				return null != e && this.option.selected[this.getSelectedMapKey(this._pieceList[e])] ? "inRange" : "outOfRange"
			},
			findTargetDataIndices: function(n) {
				var a = [];
				return this.eachTargetSeries(function(t) {
					var i = [],
						e = t.getData();
					e.each(this.getDataDimension(e), function(t, e) {
						Bx.findPieceIndex(t, this._pieceList) === n && i.push(e)
					}, this), a.push({
						seriesId: t.id,
						dataIndex: i
					})
				}, this), a
			},
			getRepresentValue: function(t) {
				var e;
				if (this.isCategory()) e = t.value;
				else if (null != t.value) e = t.value;
				else {
					var i = t.interval || [];
					e = i[0] === -1 / 0 && i[1] === 1 / 0 ? 0 : (i[0] + i[1]) / 2
				}
				return e
			},
			getVisualMeta: function(a) {
				if (!this.isCategory()) {
					var o = [],
						r = [],
						s = this,
						t = this._pieceList.slice();
					if (t.length) {
						var e = t[0].interval[0];
						e !== -1 / 0 && t.unshift({
							interval: [-1 / 0, e]
						}), (e = t[t.length - 1].interval[1]) !== 1 / 0 && t.push({
							interval: [e, 1 / 0]
						})
					} else t.push({
						interval: [-1 / 0, 1 / 0]
					});
					var i = -1 / 0;
					return E(t, function(t) {
						var e = t.interval;
						e && (e[0] > i && n([i, e[0]], "outOfRange"), n(e.slice()), i = e[1])
					}, this), {
						stops: o,
						outerColors: r
					}
				}

				function n(t, e) {
					var i = s.getRepresentValue({
						interval: t
					});
					e = e || s.getValueState(i);
					var n = a(i, e);
					t[0] === -1 / 0 ? r[0] = n : t[1] === 1 / 0 ? r[1] = n : o.push({
						value: t[0],
						color: n
					}, {
						value: t[1],
						color: n
					})
				}
			}
		}),
		hL = {
			splitNumber: function() {
				var t = this.option,
					e = this._pieceList,
					i = Math.min(t.precision, 20),
					n = this.getExtent(),
					a = t.splitNumber;
				a = Math.max(parseInt(a, 10), 1), t.splitNumber = a;
				for (var o = (n[1] - n[0]) / a; + o.toFixed(i) !== o && i < 5;) i++;
				t.precision = i, o = +o.toFixed(i);
				var r = 0;
				t.minOpen && e.push({
					index: r++,
					interval: [-1 / 0, n[0]],
					close: [0, 0]
				});
				for (var s = n[0], l = r + a; r < l; s += o) {
					var u = r === a - 1 ? n[1] : s + o;
					e.push({
						index: r++,
						interval: [s, u],
						close: [1, 1]
					})
				}
				t.maxOpen && e.push({
					index: r++,
					interval: [n[1], 1 / 0],
					close: [0, 0]
				}), Ol(e), E(e, function(t) {
					t.text = this.formatValueText(t.interval)
				}, this)
			},
			categories: function() {
				var t = this.option;
				E(t.categories, function(t) {
					this._pieceList.push({
						text: this.formatValueText(t, !0),
						value: t
					})
				}, this), cL(t, this._pieceList)
			},
			pieces: function() {
				var t = this.option,
					d = this._pieceList;
				E(t.pieces, function(t, e) {
					z(t) || (t = {
						value: t
					});
					var i = {
						text: "",
						index: e
					};
					if (null != t.label && (i.text = t.label), t.hasOwnProperty("value")) {
						var n = i.value = t.value;
						i.interval = [n, n], i.close = [1, 1]
					} else {
						for (var a = i.interval = [], o = i.close = [0, 0], r = [1, 0, 1], s = [-1 / 0, 1 / 0], l = [], u = 0; u < 2; u++) {
							for (var h = [
									["gte", "gt", "min"],
									["lte", "lt", "max"]
								][u], c = 0; c < 3 && null == a[u]; c++) a[u] = t[h[c]], o[u] = r[c], l[u] = 2 === c;
							null == a[u] && (a[u] = s[u])
						}
						l[0] && a[1] === 1 / 0 && (o[0] = 0), l[1] && a[0] === -1 / 0 && (o[1] = 0), a[0] === a[1] && o[0] && o[1] &&
							(i.value = a[0])
					}
					i.visual = Bx.retrieveVisuals(t), d.push(i)
				}, this), cL(t, d), Ol(d), E(d, function(t) {
					var e = t.close,
						i = [
							["<", "≤"][e[1]],
							[">", "≥"][e[0]]
						];
					t.text = t.text || this.formatValueText(null != t.value ? t.value : t.interval, !1, i)
				}, this)
			}
		};

	function cL(t, e) {
		var i = t.inverse;
		("vertical" === t.orient ? !i : i) && e.reverse()
	}
	JC.extend({
		type: "visualMap.piecewise",
		doRender: function() {
			var o = this.group;
			o.removeAll();
			var r = this.visualMapModel,
				s = r.get("textGap"),
				t = r.textStyleModel,
				l = t.getFont(),
				u = t.getTextColor(),
				h = this._getItemAlign(),
				c = r.itemSize,
				e = this._getViewData(),
				i = e.endsText,
				d = W(r.get("showLabel", !0), !i);
			i && this._renderEndsText(o, i[0], c, d, h), E(e.viewPieceList, function(t) {
				var e = t.piece,
					i = new Si;
				i.onclick = T(this._onItemClick, this, e), this._enableHoverLink(i, t.indexInModelPieceList);
				var n = r.getRepresentValue(e);
				if (this._createItemSymbol(i, n, [0, 0, c[0], c[1]]), d) {
					var a = this.visualMapModel.getValueState(n);
					i.add(new Dr({
						style: {
							x: "right" === h ? -s : c[0] + s,
							y: c[1] / 2,
							text: e.text,
							textVerticalAlign: "middle",
							textAlign: h,
							textFont: l,
							textFill: u,
							opacity: "outOfRange" === a ? .5 : 1
						}
					}))
				}
				o.add(i)
			}, this), i && this._renderEndsText(o, i[1], c, d, h), nu(r.get("orient"), o, r.get("itemGap")), this.renderBackground(
				o), this.positionGroup(o)
		},
		_enableHoverLink: function(t, i) {
			function e(t) {
				var e = this.visualMapModel;
				e.option.hoverLink && this.api.dispatchAction({
					type: t,
					batch: tL(e.findTargetDataIndices(i), e)
				})
			}
			t.on("mouseover", T(e, this, "highlight")).on("mouseout", T(e, this, "downplay"))
		},
		_getItemAlign: function() {
			var t = this.visualMapModel,
				e = t.option;
			if ("vertical" === e.orient) return QC(t, this.api, t.itemSize);
			var i = e.align;
			return i && "auto" !== i || (i = "left"), i
		},
		_renderEndsText: function(t, e, i, n, a) {
			if (e) {
				var o = new Si,
					r = this.visualMapModel.textStyleModel;
				o.add(new Dr({
					style: {
						x: n ? "right" === a ? i[0] : 0 : i[0] / 2,
						y: i[1] / 2,
						textVerticalAlign: "middle",
						textAlign: n ? a : "center",
						text: e,
						textFont: r.getFont(),
						textFill: r.getTextColor()
					}
				})), t.add(o)
			}
		},
		_getViewData: function() {
			var t = this.visualMapModel,
				e = N(t.getPieceList(), function(t, e) {
					return {
						piece: t,
						indexInModelPieceList: e
					}
				}),
				i = t.get("text"),
				n = t.get("orient"),
				a = t.get("inverse");
			return ("horizontal" === n ? a : !a) ? e.reverse() : i = i && i.slice().reverse(), {
				viewPieceList: e,
				endsText: i
			}
		},
		_createItemSymbol: function(t, e, i) {
			t.add(Jp(this.getControllerVisual(e, "symbol"), i[0], i[1], i[2], i[3], this.getControllerVisual(e, "color")))
		},
		_onItemClick: function(t) {
			var e = this.visualMapModel,
				i = e.option,
				n = D(i.selected),
				a = e.getSelectedMapKey(t);
			"single" === i.selectedMode ? (n[a] = !0, E(n, function(t, e) {
				n[e] = e === a
			})) : n[a] = !n[a], this.api.dispatchAction({
				type: "selectDataRange",
				from: this.uid,
				visualMapId: this.visualMapModel.id,
				selected: n
			})
		}
	});
	Jd(OC);
	var dL, fL = "urn:schemas-microsoft-com:vml",
		pL = "undefined" == typeof window ? null : window,
		gL = !1,
		mL = pL && pL.document;

	function vL(t) {
		return dL(t)
	}
	if (mL && !v.canvasSupported) try {
		mL.namespaces.zrvml || mL.namespaces.add("zrvml", fL), dL = function(t) {
			return mL.createElement("<zrvml:" + t + ' class="zrvml">')
		}
	} catch (t) {
		dL = function(t) {
			return mL.createElement("<" + t + ' xmlns="' + fL + '" class="zrvml">')
		}
	}
	var yL, xL = Ho.CMD,
		_L = Math.round,
		wL = Math.sqrt,
		bL = Math.abs,
		SL = Math.cos,
		ML = Math.sin,
		IL = Math.max;
	if (!v.canvasSupported) {
		var AL = ",",
			TL = "progid:DXImageTransform.Microsoft",
			DL = 21600,
			CL = DL / 2,
			LL = function(t) {
				t.style.cssText = "position:absolute;left:0;top:0;width:1px;height:1px;", t.coordsize = DL + "," + DL, t.coordorigin =
					"0,0"
			},
			kL = function(t, e, i) {
				return "rgb(" + [t, e, i].join(",") + ")"
			},
			PL = function(t, e) {
				e && t && e.parentNode !== t && t.appendChild(e)
			},
			NL = function(t, e) {
				e && t && e.parentNode === t && t.removeChild(e)
			},
			OL = function(t, e, i) {
				return 1e5 * (parseFloat(t) || 0) + 1e3 * (parseFloat(e) || 0) + i
			},
			EL = Fn,
			RL = function(t, e, i) {
				var n = Ee(e);
				i = +i, isNaN(i) && (i = 1), n && (t.color = kL(n[0], n[1], n[2]), t.opacity = i * n[3])
			},
			zL = function(t, e, i, n) {
				var a = "fill" === e,
					o = t.getElementsByTagName(e)[0];
				null != i[e] && "none" !== i[e] && (a || !a && i.lineWidth) ? (t[a ? "filled" : "stroked"] = "true", i[e] instanceof jr &&
					NL(t, o), o = o || vL(e), a ? function(t, e, i) {
						var n, a, o = e.fill;
						if (null != o)
							if (o instanceof jr) {
								var r, s = 0,
									l = [0, 0],
									u = 0,
									h = 1,
									c = i.getBoundingRect(),
									d = c.width,
									f = c.height;
								if ("linear" === o.type) {
									r = "gradient";
									var p = i.transform,
										g = [o.x * d, o.y * f],
										m = [o.x2 * d, o.y2 * f];
									p && (bt(g, g, p), bt(m, m, p));
									var v = m[0] - g[0],
										y = m[1] - g[1];
									(s = 180 * Math.atan2(v, y) / Math.PI) < 0 && (s += 360), s < 1e-6 && (s = 0)
								} else {
									r = "gradientradial";
									g = [o.x * d, o.y * f], p = i.transform;
									var x = i.scale,
										_ = d,
										w = f;
									l = [(g[0] - c.x) / _, (g[1] - c.y) / w], p && bt(g, g, p), _ /= x[0] * DL, w /= x[1] * DL;
									var b = IL(_, w);
									u = 0 / b, h = 2 * o.r / b - u
								}
								var S = o.colorStops.slice();
								S.sort(function(t, e) {
									return t.offset - e.offset
								});
								for (var M = S.length, I = [], A = [], T = 0; T < M; T++) {
									var D = S[T],
										C = (n = D.color, void 0, a = Ee(n), [kL(a[0], a[1], a[2]), a[3]]);
									A.push(D.offset * h + u + " " + C[0]), 0 !== T && T !== M - 1 || I.push(C)
								}
								if (2 <= M) {
									var L = I[0][0],
										k = I[1][0],
										P = I[0][1] * e.opacity,
										N = I[1][1] * e.opacity;
									t.type = r, t.method = "none", t.focus = "100%", t.angle = s, t.color = L, t.color2 = k, t.colors = A.join(
										","), t.opacity = N, t.opacity2 = P
								}
								"radial" === r && (t.focusposition = l.join(","))
							} else RL(t, o, e.opacity)
					}(o, i, n) : function(t, e) {
						e.lineDash && (t.dashstyle = e.lineDash.join(" ")), null == e.stroke || e.stroke instanceof jr || RL(t, e.stroke,
							e.opacity)
					}(o, i), PL(t, o)) : (t[a ? "filled" : "stroked"] = "false", NL(t, o))
			},
			BL = [
				[],
				[],
				[]
			];
		hr.prototype.brushVML = function(t) {
			var e = this.style,
				i = this._vmlEl;
			i || (i = vL("shape"), LL(i), this._vmlEl = i), zL(i, "fill", e, this), zL(i, "stroke", e, this);
			var n = this.transform,
				a = null != n,
				o = i.getElementsByTagName("stroke")[0];
			if (o) {
				var r = e.lineWidth;
				if (a && !e.strokeNoScale) {
					var s = n[0] * n[3] - n[1] * n[2];
					r *= wL(bL(s))
				}
				o.weight = r + "px"
			}
			var l = this.path || (this.path = new Ho);
			this.__dirtyPath && (l.beginPath(), l.subPixelOptimize = !1, this.buildPath(l, this.shape), l.toStatic(), this.__dirtyPath = !
				1), i.path = function(t, e) {
				var i, n, a, o, r, s, l = xL.M,
					u = xL.C,
					h = xL.L,
					c = xL.A,
					d = xL.Q,
					f = [],
					p = t.data,
					g = t.len();
				for (o = 0; o < g;) {
					switch (n = "", i = 0, a = p[o++]) {
						case l:
							n = " m ", i = 1, r = p[o++], s = p[o++], BL[0][0] = r, BL[0][1] = s;
							break;
						case h:
							n = " l ", i = 1, r = p[o++], s = p[o++], BL[0][0] = r, BL[0][1] = s;
							break;
						case d:
						case u:
							n = " c ", i = 3;
							var m, v, y = p[o++],
								x = p[o++],
								_ = p[o++],
								w = p[o++];
							a === d ? (_ = ((m = _) + 2 * y) / 3, w = ((v = w) + 2 * x) / 3, y = (r + 2 * y) / 3, x = (s + 2 * x) / 3) :
								(m = p[o++], v = p[o++]), BL[0][0] = y, BL[0][1] = x, BL[1][0] = _, BL[1][1] = w, r = BL[2][0] = m, s = BL[2]
								[1] = v;
							break;
						case c:
							var b = 0,
								S = 0,
								M = 1,
								I = 1,
								A = 0;
							e && (b = e[4], S = e[5], M = wL(e[0] * e[0] + e[1] * e[1]), I = wL(e[2] * e[2] + e[3] * e[3]), A = Math.atan2(
								-e[1] / I, e[0] / M));
							var T = p[o++],
								D = p[o++],
								C = p[o++],
								L = p[o++],
								k = p[o++] + A,
								P = p[o++] + k + A;
							o++;
							var N = p[o++],
								O = T + SL(k) * C,
								E = D + ML(k) * L,
								R = (y = T + SL(P) * C, x = D + ML(P) * L, N ? " wa " : " at ");
							Math.abs(O - y) < 1e-4 && (.01 < Math.abs(P - k) ? N && (O += .0125) : Math.abs(E - D) < 1e-4 ? N && O < T ||
								!N && T < O ? x -= .0125 : x += .0125 : N && E < D || !N && D < E ? y += .0125 : y -= .0125), f.push(R, _L(
									((T - C) * M + b) * DL - CL), AL, _L(((D - L) * I + S) * DL - CL), AL, _L(((T + C) * M + b) * DL - CL), AL,
								_L(((D + L) * I + S) * DL - CL), AL, _L((O * M + b) * DL - CL), AL, _L((E * I + S) * DL - CL), AL, _L((y *
									M + b) * DL - CL), AL, _L((x * I + S) * DL - CL)), r = y, s = x;
							break;
						case xL.R:
							var z = BL[0],
								B = BL[1];
							z[0] = p[o++], z[1] = p[o++], B[0] = z[0] + p[o++], B[1] = z[1] + p[o++], e && (bt(z, z, e), bt(B, B, e)), z[
									0] = _L(z[0] * DL - CL), B[0] = _L(B[0] * DL - CL), z[1] = _L(z[1] * DL - CL), B[1] = _L(B[1] * DL - CL), f
								.push(" m ", z[0], AL, z[1], " l ", B[0], AL, z[1], " l ", B[0], AL, B[1], " l ", z[0], AL, B[1]);
							break;
						case xL.Z:
							f.push(" x ")
					}
					if (0 < i) {
						f.push(n);
						for (var V = 0; V < i; V++) {
							var G = BL[V];
							e && bt(G, G, e), f.push(_L(G[0] * DL - CL), AL, _L(G[1] * DL - CL), V < i - 1 ? AL : "")
						}
					}
				}
				return f.join("")
			}(l, this.transform), i.style.zIndex = OL(this.zlevel, this.z, this.z2), PL(t, i), null != e.text ? this.drawRectText(
				t, this.getBoundingRect()) : this.removeRectText(t)
		}, hr.prototype.onRemove = function(t) {
			NL(t, this._vmlEl), this.removeRectText(t)
		}, hr.prototype.onAdd = function(t) {
			PL(t, this._vmlEl), this.appendRectText(t)
		};
		Yn.prototype.brushVML = function(t) {
			var e, i, n = this.style,
				a = n.image;
			if (function(t) {
					return "object" == typeof t && t.tagName && "IMG" === t.tagName.toUpperCase()
				}(a)) {
				var o = a.src;
				if (o === this._imageSrc) e = this._imageWidth, i = this._imageHeight;
				else {
					var r = a.runtimeStyle,
						s = r.width,
						l = r.height;
					r.width = "auto", r.height = "auto", e = a.width, i = a.height, r.width = s, r.height = l, this._imageSrc = o,
						this._imageWidth = e, this._imageHeight = i
				}
				a = o
			} else a === this._imageSrc && (e = this._imageWidth, i = this._imageHeight);
			if (a) {
				var u = n.x || 0,
					h = n.y || 0,
					c = n.width,
					d = n.height,
					f = n.sWidth,
					p = n.sHeight,
					g = n.sx || 0,
					m = n.sy || 0,
					v = f && p,
					y = this._vmlEl;
				y || (y = mL.createElement("div"), LL(y), this._vmlEl = y);
				var x, _ = y.style,
					w = !1,
					b = 1,
					S = 1;
				if (this.transform && (x = this.transform, b = wL(x[0] * x[0] + x[1] * x[1]), S = wL(x[2] * x[2] + x[3] * x[3]),
						w = x[1] || x[2]), w) {
					var M = [u, h],
						I = [u + c, h],
						A = [u, h + d],
						T = [u + c, h + d];
					bt(M, M, x), bt(I, I, x), bt(A, A, x), bt(T, T, x);
					var D = IL(M[0], I[0], A[0], T[0]),
						C = IL(M[1], I[1], A[1], T[1]),
						L = [];
					L.push("M11=", x[0] / b, AL, "M12=", x[2] / S, AL, "M21=", x[1] / b, AL, "M22=", x[3] / S, AL, "Dx=", _L(u * b +
							x[4]), AL, "Dy=", _L(h * S + x[5])), _.padding = "0 " + _L(D) + "px " + _L(C) + "px 0", _.filter = TL +
						".Matrix(" + L.join("") + ", SizingMethod=clip)"
				} else x && (u = u * b + x[4], h = h * S + x[5]), _.filter = "", _.left = _L(u) + "px", _.top = _L(h) + "px";
				var k = this._imageEl,
					P = this._cropEl;
				k || (k = mL.createElement("div"), this._imageEl = k);
				var N = k.style;
				if (v) {
					if (e && i) N.width = _L(b * e * c / f) + "px", N.height = _L(S * i * d / p) + "px";
					else {
						var O = new Image,
							E = this;
						O.onload = function() {
							O.onload = null, e = O.width, i = O.height, N.width = _L(b * e * c / f) + "px", N.height = _L(S * i * d / p) +
								"px", E._imageWidth = e, E._imageHeight = i, E._imageSrc = a
						}, O.src = a
					}
					P || ((P = mL.createElement("div")).style.overflow = "hidden", this._cropEl = P);
					var R = P.style;
					R.width = _L((c + g * c / f) * b), R.height = _L((d + m * d / p) * S), R.filter = TL + ".Matrix(Dx=" + -g * c /
						f * b + ",Dy=" + -m * d / p * S + ")", P.parentNode || y.appendChild(P), k.parentNode !== P && P.appendChild(k)
				} else N.width = _L(b * c) + "px", N.height = _L(S * d) + "px", y.appendChild(k), P && P.parentNode && (y.removeChild(
					P), this._cropEl = null);
				var z = "",
					B = n.opacity;
				B < 1 && (z += ".Alpha(opacity=" + _L(100 * B) + ") "), z += TL + ".AlphaImageLoader(src=" + a +
					", SizingMethod=scale)", N.filter = z, y.style.zIndex = OL(this.zlevel, this.z, this.z2), PL(t, y), null != n.text &&
					this.drawRectText(t, this.getBoundingRect())
			}
		}, Yn.prototype.onRemove = function(t) {
			NL(t, this._vmlEl), this._vmlEl = null, this._cropEl = null, this._imageEl = null, this.removeRectText(t)
		}, Yn.prototype.onAdd = function(t) {
			PL(t, this._vmlEl), this.appendRectText(t)
		};
		var VL, GL = "normal",
			FL = {},
			WL = 0,
			HL = document.createElement("div");
		yL = function(t, e) {
			var i = mL;
			VL || ((VL = i.createElement("div")).style.cssText =
				"position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;", mL.body.appendChild(VL)
			);
			try {
				VL.style.font = e
			} catch (t) {}
			return VL.innerHTML = "", VL.appendChild(i.createTextNode(t)), {
				width: VL.offsetWidth
			}
		}, sn["measureText"] = yL;
		for (var ZL = new bi, UL = function(t, e, i, n) {
				var a = this.style;
				this.__dirty && Cn(a);
				var o = a.text;
				if (null != o && (o += ""), o) {
					if (a.rich) {
						var r = xn(o, a);
						o = [];
						for (var s = 0; s < r.lines.length; s++) {
							for (var l = r.lines[s].tokens, u = [], h = 0; h < l.length; h++) u.push(l[h].text);
							o.push(u.join(""))
						}
						o = o.join("\n")
					}
					var c, d, f = a.textAlign,
						p = a.textVerticalAlign,
						g = function(t) {
							var e = FL[t];
							if (!e) {
								100 < WL && (WL = 0, FL = {});
								var i, n = HL.style;
								try {
									n.font = t, i = n.fontFamily.split(",")[0]
								} catch (t) {}
								e = {
									style: n.fontStyle || GL,
									variant: n.fontVariant || GL,
									weight: n.fontWeight || GL,
									size: 0 | parseFloat(n.fontSize || 12),
									family: i || "Microsoft YaHei"
								}, FL[t] = e, WL++
							}
							return e
						}(a.font),
						m = g.style + " " + g.variant + " " + g.weight + " " + g.size + 'px "' + g.family + '"';
					i = i || un(o, m, f, p, a.textPadding, a.textLineHeight);
					var v = this.transform;
					if (v && !n && (ZL.copy(e), ZL.applyTransform(v), e = ZL), n) c = e.x, d = e.y;
					else {
						var y = a.textPosition;
						if (y instanceof Array) c = e.x + EL(y[0], e.width), d = e.y + EL(y[1], e.height), f = f || "left";
						else {
							var x = this.calculateTextPosition ? this.calculateTextPosition({}, a, e) : dn({}, a, e);
							c = x.x, d = x.y, f = f || x.textAlign, p = p || x.textVerticalAlign
						}
					}
					c = hn(c, i.width, f), d = cn(d, i.height, p), d += i.height / 2;
					var _, w, b, S = vL,
						M = this._textVmlEl;
					M ? w = (_ = (b = M.firstChild).nextSibling).nextSibling : (M = S("line"), _ = S("path"), w = S("textpath"), b =
						S("skew"), w.style["v-text-align"] = "left", LL(M), _.textpathok = !0, w.on = !0, M.from = "0 0", M.to =
						"1000 0.05", PL(M, b), PL(M, _), PL(M, w), this._textVmlEl = M);
					var I = [c, d],
						A = M.style;
					v && n ? (bt(I, I, v), b.on = !0, b.matrix = v[0].toFixed(3) + AL + v[2].toFixed(3) + AL + v[1].toFixed(3) + AL +
						v[3].toFixed(3) + ",0,0", b.offset = (_L(I[0]) || 0) + "," + (_L(I[1]) || 0), b.origin = "0 0", A.left = "0px",
						A.top = "0px") : (b.on = !1, A.left = _L(c) + "px", A.top = _L(d) + "px"), w.string = function(t) {
						return String(t).replace(/&/g, "&amp;").replace(/"/g, "&quot;")
					}(o);
					try {
						w.style.font = m
					} catch (t) {}
					zL(M, "fill", {
						fill: a.textFill,
						opacity: a.opacity
					}, this), zL(M, "stroke", {
						stroke: a.textStroke,
						opacity: a.opacity,
						lineDash: a.lineDash || null
					}, this), M.style.zIndex = OL(this.zlevel, this.z, this.z2), PL(t, M)
				}
			}, XL = function(t) {
				NL(t, this._textVmlEl), this._textVmlEl = null
			}, YL = function(t) {
				PL(t, this._textVmlEl)
			}, jL = [Zn, Xn, Yn, hr, Dr], qL = 0; qL < jL.length; qL++) {
			var KL = jL[qL].prototype;
			KL.drawRectText = UL, KL.removeRectText = XL, KL.appendRectText = YL
		}
		Dr.prototype.brushVML = function(t) {
			var e = this.style;
			null != e.text ? this.drawRectText(t, {
				x: e.x || 0,
				y: e.y || 0,
				width: 0,
				height: 0
			}, this.getBoundingRect(), !0) : this.removeRectText(t)
		}, Dr.prototype.onRemove = function(t) {
			this.removeRectText(t)
		}, Dr.prototype.onAdd = function(t) {
			this.appendRectText(t)
		}
	}

	function $L(t) {
		return parseInt(t, 10)
	}

	function JL(t, e) {
		! function() {
			if (!gL && mL) {
				gL = !0;
				var t = mL.styleSheets;
				t.length < 31 ? mL.createStyleSheet().addRule(".zrvml", "behavior:url(#default#VML)") : t[0].addRule(".zrvml",
					"behavior:url(#default#VML)")
			}
		}(), this.root = t, this.storage = e;
		var i = document.createElement("div"),
			n = document.createElement("div");
		i.style.cssText = "display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;", n.style.cssText =
			"position:absolute;left:0;top:0;", t.appendChild(i), this._vmlRoot = n, this._vmlViewport = i, this.resize();
		var a = e.delFromStorage,
			o = e.addToStorage;
		e.delFromStorage = function(t) {
			a.call(e, t), t && t.onRemove && t.onRemove(n)
		}, e.addToStorage = function(t) {
			t.onAdd && t.onAdd(n), o.call(e, t)
		}, this._firstPaint = !0
	}
	JL.prototype = {
		constructor: JL,
		getType: function() {
			return "vml"
		},
		getViewportRoot: function() {
			return this._vmlViewport
		},
		getViewportRootOffset: function() {
			var t = this.getViewportRoot();
			if (t) return {
				offsetLeft: t.offsetLeft || 0,
				offsetTop: t.offsetTop || 0
			}
		},
		refresh: function() {
			var t = this.storage.getDisplayList(!0, !0);
			this._paintList(t)
		},
		_paintList: function(t) {
			for (var e = this._vmlRoot, i = 0; i < t.length; i++) {
				var n = t[i];
				n.invisible || n.ignore ? (n.__alreadyNotVisible || n.onRemove(e), n.__alreadyNotVisible = !0) : (n.__alreadyNotVisible &&
					n.onAdd(e), n.__alreadyNotVisible = !1, n.__dirty && (n.beforeBrush && n.beforeBrush(), (n.brushVML || n.brush)
						.call(n, e), n.afterBrush && n.afterBrush())), n.__dirty = !1
			}
			this._firstPaint && (this._vmlViewport.appendChild(e), this._firstPaint = !1)
		},
		resize: function(t, e) {
			t = null == t ? this._getWidth() : t, e = null == e ? this._getHeight() : e;
			if (this._width !== t || this._height !== e) {
				this._width = t, this._height = e;
				var i = this._vmlViewport.style;
				i.width = t + "px", i.height = e + "px"
			}
		},
		dispose: function() {
			this.root.innerHTML = "", this._vmlRoot = this._vmlViewport = this.storage = null
		},
		getWidth: function() {
			return this._width
		},
		getHeight: function() {
			return this._height
		},
		clear: function() {
			this._vmlViewport && this.root.removeChild(this._vmlViewport)
		},
		_getWidth: function() {
			var t = this.root,
				e = t.currentStyle;
			return (t.clientWidth || $L(e.width)) - $L(e.paddingLeft) - $L(e.paddingRight) | 0
		},
		_getHeight: function() {
			var t = this.root,
				e = t.currentStyle;
			return (t.clientHeight || $L(e.height)) - $L(e.paddingTop) - $L(e.paddingBottom) | 0
		}
	}, E(["getLayer", "insertLayer", "eachLayer", "eachBuiltinLayer", "eachOtherLayer", "getLayers", "modLayer",
		"delLayer", "clearLayer", "toDataURL", "pathToImage"
	], function(t) {
		JL.prototype[t] = function(t) {
			return function() {
				ci('In IE8.0 VML mode painter not support method "' + t + '"')
			}
		}(t)
	}), pa("vml", JL);

	function QL(t) {
		return document.createElementNS("http://www.w3.org/2000/svg", t)
	}
	var tk = Ho.CMD,
		ek = Array.prototype.join,
		ik = "none",
		nk = Math.round,
		ak = Math.sin,
		ok = Math.cos,
		rk = Math.PI,
		sk = 2 * Math.PI,
		lk = 180 / rk,
		uk = 1e-4;

	function hk(t) {
		return nk(1e4 * t) / 1e4
	}

	function ck(t) {
		return t < uk && -uk < t
	}

	function dk(t, e) {
		e && fk(t, "transform", "matrix(" + ek.call(e, ",") + ")")
	}

	function fk(t, e, i) {
		i && ("linear" === i.type || "radial" === i.type) || t.setAttribute(e, i)
	}

	function pk(t, e, i, n) {
		if (function(t, e) {
				var i = e ? t.textFill : t.fill;
				return null != i && i !== ik
			}(e, i)) {
			var a = i ? e.textFill : e.fill;
			fk(t, "fill", a = "transparent" === a ? ik : a), fk(t, "fill-opacity", null != e.fillOpacity ? e.fillOpacity * e.opacity :
				e.opacity)
		} else fk(t, "fill", ik);
		if (function(t, e) {
				var i = e ? t.textStroke : t.stroke;
				return null != i && i !== ik
			}(e, i)) {
			var o = i ? e.textStroke : e.stroke;
			fk(t, "stroke", o = "transparent" === o ? ik : o), fk(t, "stroke-width", (i ? e.textStrokeWidth : e.lineWidth) / (!
					i && e.strokeNoScale ? n.getLineScale() : 1)), fk(t, "paint-order", i ? "stroke" : "fill"), fk(t,
					"stroke-opacity", null != e.strokeOpacity ? e.strokeOpacity : e.opacity), e.lineDash ? (fk(t, "stroke-dasharray",
					e.lineDash.join(",")), fk(t, "stroke-dashoffset", nk(e.lineDashOffset || 0))) : fk(t, "stroke-dasharray", ""), e.lineCap &&
				fk(t, "stroke-linecap", e.lineCap), e.lineJoin && fk(t, "stroke-linejoin", e.lineJoin), e.miterLimit && fk(t,
					"stroke-miterlimit", e.miterLimit)
		} else fk(t, "stroke", ik)
	}
	var gk = {};
	gk.brush = function(t) {
		var e = t.style,
			i = t.__svgEl;
		i || (i = QL("path"), t.__svgEl = i), t.path || t.createPathProxy();
		var n = t.path;
		if (t.__dirtyPath) {
			n.beginPath(), n.subPixelOptimize = !1, t.buildPath(n, t.shape), t.__dirtyPath = !1;
			var a = function(t) {
				for (var e = [], i = t.data, n = t.len(), a = 0; a < n;) {
					var o = "",
						r = 0;
					switch (i[a++]) {
						case tk.M:
							o = "M", r = 2;
							break;
						case tk.L:
							o = "L", r = 2;
							break;
						case tk.Q:
							o = "Q", r = 4;
							break;
						case tk.C:
							o = "C", r = 6;
							break;
						case tk.A:
							var s = i[a++],
								l = i[a++],
								u = i[a++],
								h = i[a++],
								c = i[a++],
								d = i[a++],
								f = i[a++],
								p = i[a++],
								g = Math.abs(d),
								m = ck(g - sk) || (p ? sk <= d : sk <= -d),
								v = 0 < d ? d % sk : d % sk + sk,
								y = !1;
							y = !!m || !ck(g) && rk <= v == !!p;
							var x = hk(s + u * ok(c)),
								_ = hk(l + h * ak(c));
							m && (d = p ? sk - 1e-4 : 1e-4 - sk, y = !0, 9 === a && e.push("M", x, _));
							var w = hk(s + u * ok(c + d)),
								b = hk(l + h * ak(c + d));
							e.push("A", hk(u), hk(h), nk(f * lk), +y, +p, w, b);
							break;
						case tk.Z:
							o = "Z";
							break;
						case tk.R:
							w = hk(i[a++]), b = hk(i[a++]);
							var S = hk(i[a++]),
								M = hk(i[a++]);
							e.push("M", w, b, "L", w + S, b, "L", w + S, b + M, "L", w, b + M, "L", w, b)
					}
					o && e.push(o);
					for (var I = 0; I < r; I++) e.push(hk(i[a++]))
				}
				return e.join(" ")
			}(n);
			a.indexOf("NaN") < 0 && fk(i, "d", a)
		}
		pk(i, e, !1, t), dk(i, t.transform), null != e.text && bk(t, t.getBoundingRect())
	};
	var mk = {
			brush: function(t) {
				var e = t.style,
					i = e.image;
				i instanceof HTMLImageElement && (i = i.src);
				if (i) {
					var n = e.x || 0,
						a = e.y || 0,
						o = e.width,
						r = e.height,
						s = t.__svgEl;
					s || (s = QL("image"), t.__svgEl = s), i !== t.__imageSrc && (function(t, e, i) {
						t.setAttributeNS("http://www.w3.org/1999/xlink", e, i)
					}(s, "href", i), t.__imageSrc = i), fk(s, "width", o), fk(s, "height", r), fk(s, "x", n), fk(s, "y", a), dk(s,
						t.transform), null != e.text && bk(t, t.getBoundingRect())
				}
			}
		},
		vk = {},
		yk = new bi,
		xk = {},
		_k = [],
		wk = {
			left: "start",
			right: "end",
			center: "middle",
			middle: "middle"
		},
		bk = function(t, e) {
			var i = t.style,
				n = t.transform,
				a = t instanceof Dr || i.transformText;
			t.__dirty && Cn(i);
			var o = i.text;
			if (null != o && (o += ""), Hn(o, i)) {
				null == o && (o = ""), !a && n && (yk.copy(e), yk.applyTransform(n), e = yk);
				var r = t.__textSvgEl;
				r || (r = QL("text"), t.__textSvgEl = r);
				var s = r.style,
					l = i.font || rn,
					u = r.__computedFont;
				l !== r.__styleFont && (s.font = r.__styleFont = l, u = r.__computedFont = s.font);
				var h = i.textPadding,
					c = i.textLineHeight,
					d = t.__textCotentBlock;
				d && !t.__dirtyText || (d = t.__textCotentBlock = yn(o, u, h, c, i.truncate));
				var f = d.outerHeight,
					p = d.lineHeight;
				zn(xk, t, i, e);
				var g = xk.baseX,
					m = xk.baseY,
					v = xk.textAlign || "left",
					y = xk.textVerticalAlign;
				! function(t, e, i, n, a, o, r) {
					te(_k), e && i && ee(_k, i);
					var s = n.textRotation;
					if (a && s) {
						var l = n.textOrigin;
						"center" === l ? (o = a.width / 2 + a.x, r = a.height / 2 + a.y) : l && (o = l[0] + a.x, r = l[1] + a.y), _k[4] -=
							o, _k[5] -= r, ae(_k, _k, s), _k[4] += o, _k[5] += r
					}
					dk(t, _k)
				}(r, a, n, i, e, g, m);
				var x = g,
					_ = cn(m, f, y);
				h && (x = function(t, e, i) {
					return "right" === e ? t - i[1] : "center" === e ? t + i[3] / 2 - i[1] / 2 : t + i[3]
				}(g, v, h), _ += h[0]), _ += p / 2, pk(r, i, !0, t);
				var w = d.canCacheByTextString,
					b = t.__tspanList || (t.__tspanList = []),
					S = b.length;
				if (w && t.__canCacheByTextString && t.__text === o) {
					if (t.__dirtyText && S)
						for (var M = 0; M < S; ++M) Sk(b[M], v, x, _ + M * p)
				} else {
					t.__text = o, t.__canCacheByTextString = w;
					var I = d.lines,
						A = I.length;
					for (M = 0; M < A; M++) {
						var T = b[M],
							D = I[M];
						T ? T.__zrText !== D && (T.innerHTML = "", T.appendChild(document.createTextNode(D))) : (T = b[M] = QL("tspan"),
							r.appendChild(T), T.appendChild(document.createTextNode(D))), Sk(T, v, x, _ + M * p)
					}
					if (A < S) {
						for (; M < S; M++) r.removeChild(b[M]);
						b.length = A
					}
				}
			}
		};

	function Sk(t, e, i, n) {
		fk(t, "dominant-baseline", "middle"), fk(t, "text-anchor", wk[e]), fk(t, "x", i), fk(t, "y", n)
	}

	function Mk() {}

	function Ik(t, e) {
		for (var i = 0, n = e.length, a = 0, o = 0; i < n; i++) {
			var r = e[i];
			if (r.removed) {
				for (s = [], l = o; l < o + r.count; l++) s.push(l);
				r.indices = s, o += r.count
			} else {
				for (var s = [], l = a; l < a + r.count; l++) s.push(l);
				r.indices = s, a += r.count, r.added || (o += r.count)
			}
		}
		return e
	}
	vk.drawRectText = bk, vk.brush = function(t) {
		null != t.style.text && bk(t, !1)
	}, Mk.prototype = {
		diff: function(l, u, t) {
			t = t || function(t, e) {
				return t === e
			}, this.equals = t;
			var h = this;
			l = l.slice();
			var c = (u = u.slice()).length,
				d = l.length,
				f = 1,
				e = c + d,
				p = [{
					newPos: -1,
					components: []
				}],
				i = this.extractCommon(p[0], u, l, 0);
			if (p[0].newPos + 1 >= c && d <= i + 1) {
				for (var n = [], a = 0; a < u.length; a++) n.push(a);
				return [{
					indices: n,
					count: u.length
				}]
			}

			function o() {
				for (var t = -1 * f; t <= f; t += 2) {
					var e, i = p[t - 1],
						n = p[t + 1],
						a = (n ? n.newPos : 0) - t;
					i && (p[t - 1] = void 0);
					var o = i && i.newPos + 1 < c,
						r = n && 0 <= a && a < d;
					if (o || r) {
						if (!o || r && i.newPos < n.newPos ? (e = {
								newPos: (s = n).newPos,
								components: s.components.slice(0)
							}, h.pushComponent(e.components, void 0, !0)) : ((e = i).newPos++, h.pushComponent(e.components, !0, void 0)),
							a = h.extractCommon(e, u, l, t), e.newPos + 1 >= c && d <= a + 1) return Ik(h, e.components, u, l);
						p[t] = e
					} else p[t] = void 0
				}
				var s;
				f++
			}
			for (; f <= e;) {
				var r = o();
				if (r) return r
			}
		},
		pushComponent: function(t, e, i) {
			var n = t[t.length - 1];
			n && n.added === e && n.removed === i ? t[t.length - 1] = {
				count: n.count + 1,
				added: e,
				removed: i
			} : t.push({
				count: 1,
				added: e,
				removed: i
			})
		},
		extractCommon: function(t, e, i, n) {
			for (var a = e.length, o = i.length, r = t.newPos, s = r - n, l = 0; r + 1 < a && s + 1 < o && this.equals(e[r +
					1], i[s + 1]);) r++, s++, l++;
			return l && t.components.push({
				count: l
			}), t.newPos = r, s
		},
		tokenize: function(t) {
			return t.slice()
		},
		join: function(t) {
			return t.slice()
		}
	};
	var Ak = new Mk;

	function Tk(t, e, i, n, a) {
		this._zrId = t, this._svgRoot = e, this._tagNames = "string" == typeof i ? [i] : i, this._markLabel = n, this._domName =
			a || "_dom", this.nextId = 0
	}

	function Dk(t, e) {
		Tk.call(this, t, e, ["linearGradient", "radialGradient"], "__gradient_in_use__")
	}

	function Ck(t, e) {
		Tk.call(this, t, e, "clipPath", "__clippath_in_use__")
	}

	function Lk(t, e) {
		Tk.call(this, t, e, ["filter"], "__filter_in_use__", "_shadowDom")
	}

	function kk(t) {
		return t && (t.shadowBlur || t.shadowOffsetX || t.shadowOffsetY || t.textShadowBlur || t.textShadowOffsetX || t.textShadowOffsetY)
	}

	function Pk(t) {
		return parseInt(t, 10)
	}

	function Nk(t, e) {
		return e && t && e.parentNode !== t
	}

	function Ok(t, e, i) {
		if (Nk(t, e) && i) {
			var n = i.nextSibling;
			n ? t.insertBefore(e, n) : t.appendChild(e)
		}
	}

	function Ek(t, e) {
		if (Nk(t, e)) {
			var i = t.firstChild;
			i ? t.insertBefore(e, i) : t.appendChild(e)
		}
	}

	function Rk(t, e) {
		e && t && e.parentNode === t && t.removeChild(e)
	}

	function zk(t) {
		return t.__textSvgEl
	}

	function Bk(t) {
		return t.__svgEl
	}
	Tk.prototype.createElement = QL, Tk.prototype.getDefs = function(t) {
		var e = this._svgRoot,
			n = this._svgRoot.getElementsByTagName("defs");
		return 0 === n.length ? t ? ((n = e.insertBefore(this.createElement("defs"), e.firstChild)).contains || (n.contains =
			function(t) {
				var e = n.children;
				if (!e) return !1;
				for (var i = e.length - 1; 0 <= i; --i)
					if (e[i] === t) return !0;
				return !1
			}), n) : null : n[0]
	}, Tk.prototype.update = function(t, e) {
		if (t) {
			var i = this.getDefs(!1);
			if (t[this._domName] && i.contains(t[this._domName])) "function" == typeof e && e(t);
			else {
				var n = this.add(t);
				n && (t[this._domName] = n)
			}
		}
	}, Tk.prototype.addDom = function(t) {
		this.getDefs(!0).appendChild(t)
	}, Tk.prototype.removeDom = function(t) {
		var e = this.getDefs(!1);
		e && t[this._domName] && (e.removeChild(t[this._domName]), t[this._domName] = null)
	}, Tk.prototype.getDoms = function() {
		var i = this.getDefs(!1);
		if (!i) return [];
		var n = [];
		return E(this._tagNames, function(t) {
			var e = i.getElementsByTagName(t);
			n = n.concat([].slice.call(e))
		}), n
	}, Tk.prototype.markAllUnused = function() {
		var t = this.getDoms(),
			e = this;
		E(t, function(t) {
			t[e._markLabel] = "0"
		})
	}, Tk.prototype.markUsed = function(t) {
		t && (t[this._markLabel] = "1")
	}, Tk.prototype.removeUnused = function() {
		var e = this.getDefs(!1);
		if (e) {
			var t = this.getDoms(),
				i = this;
			E(t, function(t) {
				"1" !== t[i._markLabel] && e.removeChild(t)
			})
		}
	}, Tk.prototype.getSvgProxy = function(t) {
		return t instanceof hr ? gk : t instanceof Yn ? mk : t instanceof Dr ? vk : gk
	}, Tk.prototype.getTextSvgElement = function(t) {
		return t.__textSvgEl
	}, Tk.prototype.getSvgElement = function(t) {
		return t.__svgEl
	}, w(Dk, Tk), Dk.prototype.addWithoutUpdate = function(o, r) {
		if (r && r.style) {
			var s = this;
			E(["fill", "stroke"], function(t) {
				if (r.style[t] && ("linear" === r.style[t].type || "radial" === r.style[t].type)) {
					var e, i = r.style[t],
						n = s.getDefs(!0);
					i._dom ? (e = i._dom, n.contains(i._dom) || s.addDom(e)) : e = s.add(i), s.markUsed(r);
					var a = e.getAttribute("id");
					o.setAttribute(t, "url(#" + a + ")")
				}
			})
		}
	}, Dk.prototype.add = function(t) {
		var e;
		if ("linear" === t.type) e = this.createElement("linearGradient");
		else {
			if ("radial" !== t.type) return ci("Illegal gradient type."), null;
			e = this.createElement("radialGradient")
		}
		return t.id = t.id || this.nextId++, e.setAttribute("id", "zr" + this._zrId + "-gradient-" + t.id), this.updateDom(
			t, e), this.addDom(e), e
	}, Dk.prototype.update = function(i) {
		var n = this;
		Tk.prototype.update.call(this, i, function() {
			var t = i.type,
				e = i._dom.tagName;
			"linear" === t && "linearGradient" === e || "radial" === t && "radialGradient" === e ? n.updateDom(i, i._dom) :
				(n.removeDom(i), n.add(i))
		})
	}, Dk.prototype.updateDom = function(t, e) {
		if ("linear" === t.type) e.setAttribute("x1", t.x), e.setAttribute("y1", t.y), e.setAttribute("x2", t.x2), e.setAttribute(
			"y2", t.y2);
		else {
			if ("radial" !== t.type) return void ci("Illegal gradient type.");
			e.setAttribute("cx", t.x), e.setAttribute("cy", t.y), e.setAttribute("r", t.r)
		}
		t.global ? e.setAttribute("gradientUnits", "userSpaceOnUse") : e.setAttribute("gradientUnits", "objectBoundingBox"),
			e.innerHTML = "";
		for (var i = t.colorStops, n = 0, a = i.length; n < a; ++n) {
			var o = this.createElement("stop");
			o.setAttribute("offset", 100 * i[n].offset + "%");
			var r = i[n].color;
			if (r.indexOf(!1)) {
				var s = Ee(r)[3],
					l = Be(r);
				o.setAttribute("stop-color", "#" + l), o.setAttribute("stop-opacity", s)
			} else o.setAttribute("stop-color", i[n].color);
			e.appendChild(o)
		}
		t._dom = e
	}, Dk.prototype.markUsed = function(t) {
		if (t.style) {
			var e = t.style.fill;
			e && e._dom && Tk.prototype.markUsed.call(this, e._dom), (e = t.style.stroke) && e._dom && Tk.prototype.markUsed.call(
				this, e._dom)
		}
	}, w(Ck, Tk), Ck.prototype.update = function(t) {
		var e = this.getSvgElement(t);
		e && this.updateDom(e, t.__clipPaths, !1);
		var i = this.getTextSvgElement(t);
		i && this.updateDom(i, t.__clipPaths, !0), this.markUsed(t)
	}, Ck.prototype.updateDom = function(t, e, i) {
		if (e && 0 < e.length) {
			var n, a, o = this.getDefs(!0),
				r = e[0],
				s = i ? "_textDom" : "_dom";
			r[s] ? (a = r[s].getAttribute("id"), n = r[s], o.contains(n) || o.appendChild(n)) : (a = "zr" + this._zrId +
				"-clip-" + this.nextId, ++this.nextId, (n = this.createElement("clipPath")).setAttribute("id", a), o.appendChild(
					n), r[s] = n);
			var l = this.getSvgProxy(r);
			if (r.transform && r.parent.invTransform && !i) {
				var u = Array.prototype.slice.call(r.transform);
				ie(r.transform, r.parent.invTransform, r.transform), l.brush(r), r.transform = u
			} else l.brush(r);
			var h = this.getSvgElement(r);
			n.innerHTML = "", n.appendChild(h.cloneNode()), t.setAttribute("clip-path", "url(#" + a + ")"), 1 < e.length &&
				this.updateDom(n, e.slice(1), i)
		} else t && t.setAttribute("clip-path", "none")
	}, Ck.prototype.markUsed = function(t) {
		var e = this;
		t.__clipPaths && E(t.__clipPaths, function(t) {
			t._dom && Tk.prototype.markUsed.call(e, t._dom), t._textDom && Tk.prototype.markUsed.call(e, t._textDom)
		})
	}, w(Lk, Tk), Lk.prototype.addWithoutUpdate = function(t, e) {
		if (e && kk(e.style)) {
			var i;
			if (e._shadowDom) i = e._shadowDom, this.getDefs(!0).contains(e._shadowDom) || this.addDom(i);
			else i = this.add(e);
			this.markUsed(e);
			var n = i.getAttribute("id");
			t.style.filter = "url(#" + n + ")"
		}
	}, Lk.prototype.add = function(t) {
		var e = this.createElement("filter");
		return t._shadowDomId = t._shadowDomId || this.nextId++, e.setAttribute("id", "zr" + this._zrId + "-shadow-" + t._shadowDomId),
			this.updateDom(t, e), this.addDom(e), e
	}, Lk.prototype.update = function(t, e) {
		if (kk(e.style)) {
			var i = this;
			Tk.prototype.update.call(this, e, function() {
				i.updateDom(e, e._shadowDom)
			})
		} else this.remove(t, e)
	}, Lk.prototype.remove = function(t, e) {
		null != e._shadowDomId && (this.removeDom(t), t.style.filter = "")
	}, Lk.prototype.updateDom = function(t, e) {
		var i = e.getElementsByTagName("feDropShadow");
		i = 0 === i.length ? this.createElement("feDropShadow") : i[0];
		var n, a, o, r, s = t.style,
			l = t.scale && t.scale[0] || 1,
			u = t.scale && t.scale[1] || 1;
		if (s.shadowBlur || s.shadowOffsetX || s.shadowOffsetY) n = s.shadowOffsetX || 0, a = s.shadowOffsetY || 0, o = s.shadowBlur,
			r = s.shadowColor;
		else {
			if (!s.textShadowBlur) return void this.removeDom(e, s);
			n = s.textShadowOffsetX || 0, a = s.textShadowOffsetY || 0, o = s.textShadowBlur, r = s.textShadowColor
		}
		i.setAttribute("dx", n / l), i.setAttribute("dy", a / u), i.setAttribute("flood-color", r);
		var h = o / 2 / l + " " + o / 2 / u;
		i.setAttribute("stdDeviation", h), e.setAttribute("x", "-100%"), e.setAttribute("y", "-100%"), e.setAttribute(
				"width", Math.ceil(o / 2 * 200) + "%"), e.setAttribute("height", Math.ceil(o / 2 * 200) + "%"), e.appendChild(i),
			t._shadowDom = e
	}, Lk.prototype.markUsed = function(t) {
		t._shadowDom && Tk.prototype.markUsed.call(this, t._shadowDom)
	};

	function Vk(t, e, i, n) {
		this.root = t, this.storage = e, this._opts = i = L({}, i || {});
		var a = QL("svg");
		a.setAttribute("xmlns", "http://www.w3.org/2000/svg"), a.setAttribute("version", "1.1"), a.setAttribute(
				"baseProfile", "full"), a.style.cssText = "user-select:none;position:absolute;left:0;top:0;", this.gradientManager =
			new Dk(n, a), this.clipPathManager = new Ck(n, a), this.shadowManager = new Lk(n, a);
		var o = document.createElement("div");
		o.style.cssText = "overflow:hidden;position:relative", this._svgRoot = a, this._viewport = o, t.appendChild(o), o.appendChild(
			a), this.resize(i.width, i.height), this._visibleList = []
	}
	Vk.prototype = {
			constructor: Vk,
			getType: function() {
				return "svg"
			},
			getViewportRoot: function() {
				return this._viewport
			},
			getViewportRootOffset: function() {
				var t = this.getViewportRoot();
				if (t) return {
					offsetLeft: t.offsetLeft || 0,
					offsetTop: t.offsetTop || 0
				}
			},
			refresh: function() {
				var t = this.storage.getDisplayList(!0);
				this._paintList(t)
			},
			setBackgroundColor: function(t) {
				this._viewport.style.background = t
			},
			_paintList: function(t) {
				this.gradientManager.markAllUnused(), this.clipPathManager.markAllUnused(), this.shadowManager.markAllUnused();
				var e, i, n = this._svgRoot,
					a = this._visibleList,
					o = t.length,
					r = [];
				for (e = 0; e < o; e++) {
					var s = t[e],
						l = (i = s) instanceof hr ? gk : i instanceof Yn ? mk : i instanceof Dr ? vk : gk,
						u = Bk(s) || zk(s);
					s.invisible || (s.__dirty && (l && l.brush(s), this.clipPathManager.update(s), s.style && (this.gradientManager.update(
							s.style.fill), this.gradientManager.update(s.style.stroke), this.shadowManager.update(u, s)), s.__dirty = !1),
						r.push(s))
				}
				var h, c = function(t, e, i) {
					return Ak.diff(t, e, i)
				}(a, r);
				for (e = 0; e < c.length; e++) {
					if ((p = c[e]).removed)
						for (var d = 0; d < p.count; d++) {
							u = Bk(s = a[p.indices[d]]);
							var f = zk(s);
							Rk(n, u), Rk(n, f)
						}
				}
				for (e = 0; e < c.length; e++) {
					var p;
					if ((p = c[e]).added)
						for (d = 0; d < p.count; d++) {
							u = Bk(s = r[p.indices[d]]), f = zk(s);
							h ? Ok(n, u, h) : Ek(n, u), u ? Ok(n, f, u) : h ? Ok(n, f, h) : Ek(n, f), Ok(n, f, u), h = f || u || h, this.gradientManager
								.addWithoutUpdate(u || f, s), this.shadowManager.addWithoutUpdate(u || f, s), this.clipPathManager.markUsed(s)
						} else if (!p.removed)
							for (d = 0; d < p.count; d++) {
								h = zk(s = r[p.indices[d]]) || Bk(s) || h;
								u = Bk(s), f = zk(s);
								this.gradientManager.markUsed(s), this.gradientManager.addWithoutUpdate(u || f, s), this.shadowManager.markUsed(
									s), this.shadowManager.addWithoutUpdate(u || f, s), this.clipPathManager.markUsed(s)
							}
				}
				this.gradientManager.removeUnused(), this.clipPathManager.removeUnused(), this.shadowManager.removeUnused(), this
					._visibleList = r
			},
			_getDefs: function(t) {
				var n, e = this._svgRoot;
				return 0 !== (n = this._svgRoot.getElementsByTagName("defs")).length ? n[0] : t ? ((n = e.insertBefore(QL("defs"),
					e.firstChild)).contains || (n.contains = function(t) {
					var e = n.children;
					if (!e) return !1;
					for (var i = e.length - 1; 0 <= i; --i)
						if (e[i] === t) return !0;
					return !1
				}), n) : null
			},
			resize: function(t, e) {
				var i = this._viewport;
				i.style.display = "none";
				var n = this._opts;
				if (null != t && (n.width = t), null != e && (n.height = e), t = this._getSize(0), e = this._getSize(1), i.style.display =
					"", this._width !== t || this._height !== e) {
					this._width = t, this._height = e;
					var a = i.style;
					a.width = t + "px", a.height = e + "px";
					var o = this._svgRoot;
					o.setAttribute("width", t), o.setAttribute("height", e)
				}
			},
			getWidth: function() {
				return this._width
			},
			getHeight: function() {
				return this._height
			},
			_getSize: function(t) {
				var e = this._opts,
					i = ["width", "height"][t],
					n = ["clientWidth", "clientHeight"][t],
					a = ["paddingLeft", "paddingTop"][t],
					o = ["paddingRight", "paddingBottom"][t];
				if (null != e[i] && "auto" !== e[i]) return parseFloat(e[i]);
				var r = this.root,
					s = document.defaultView.getComputedStyle(r);
				return (r[n] || Pk(s[i]) || Pk(r.style[i])) - (Pk(s[a]) || 0) - (Pk(s[o]) || 0) | 0
			},
			dispose: function() {
				this.root.innerHTML = "", this._svgRoot = this._viewport = this.storage = null
			},
			clear: function() {
				this._viewport && this.root.removeChild(this._viewport)
			},
			pathToDataUrl: function() {
				return this.refresh(), "data:image/svg+xml;charset=UTF-8," + this._svgRoot.outerHTML
			}
		}, E(["getLayer", "insertLayer", "eachLayer", "eachBuiltinLayer", "eachOtherLayer", "getLayers", "modLayer",
			"delLayer", "clearLayer", "toDataURL", "pathToImage"
		], function(t) {
			Vk.prototype[t] = function(t) {
				return function() {
					ci('In SVG mode painter not support method "' + t + '"')
				}
			}(t)
		}), pa("svg", Vk), t.version = "4.5.0", t.dependencies = {
			zrender: "4.1.2"
		}, t.PRIORITY = cd, t.init = function(t, e, i) {
			var n = Kd(t);
			if (n) return n;
			var a = new vd(t, e, i);
			return a.id = "ec_" + Ud++, Hd[a.id] = a, Oa(t, Yd, a.id),
				function(n) {
					var a = "__connectUpdateStatus";

					function o(t, e) {
						for (var i = 0; i < t.length; i++) {
							t[i][a] = e
						}
					}
					sd(Rd, function(t, e) {
						n._messageCenter.on(e, function(t) {
							if (Zd[n.group] && 0 !== n[a]) {
								if (t && t.escapeConnect) return;
								var e = n.makeActionFromEvent(t),
									i = [];
								sd(Hd, function(t) {
									t !== n && t.group === n.group && i.push(t)
								}), o(i, 0), sd(i, function(t) {
									1 !== t[a] && t.dispatchAction(e)
								}), o(i, 2)
							}
						})
					})
				}(a), a
		}, t.connect = function(e) {
			if (k(e)) {
				var t = e;
				e = null, sd(t, function(t) {
					null != t.group && (e = t.group)
				}), e = e || "g_" + Xd++, sd(t, function(t) {
					t.group = e
				})
			}
			return Zd[e] = !0, e
		}, t.disConnect = jd, t.disconnect = qd, t.dispose = function(t) {
			"string" == typeof t ? t = Hd[t] : t instanceof vd || (t = Kd(t)), t instanceof vd && !t.isDisposed() && t.dispose()
		}, t.getInstanceByDom = Kd, t.getInstanceById = function(t) {
			return Hd[t]
		}, t.registerTheme = $d, t.registerPreprocessor = Jd, t.registerProcessor = Qd, t.registerPostUpdate = function(t) {
			Vd.push(t)
		}, t.registerAction = tf, t.registerCoordinateSystem = ef, t.getCoordinateSystemDimensions = function(t) {
			var e = Hu.get(t);
			if (e) return e.getDimensionsInfo ? e.getDimensionsInfo() : e.dimensions.slice()
		}, t.registerLayout = nf, t.registerVisual = af, t.registerLoading = rf, t.extendComponentModel = sf, t.extendComponentView =
		lf, t.extendSeriesModel = uf, t.extendChartView = hf, t.setCanvasCreator = function(t) {
			f("createCanvas", t)
		}, t.registerMap = function(t, e, i) {
			ad.registerMap(t, e, i)
		}, t.getMap = function(t) {
			var e = ad.retrieveMap(t);
			return e && e[0] && {
				geoJson: e[0].geoJSON,
				specialAreas: e[0].specialAreas
			}
		}, t.dataTool = {}, t.zrender = ma, t.number = Rl, t.format = Jl, t.throttle = cc, t.helper = tg, t.matrix = le, t.vector =
		It, t.color = Xe, t.parseGeoJSON = rg, t.parseGeoJson = xg, t.util = _g, t.graphic = wg, t.List = Tf, t.Model = dl,
		t.Axis = vg, t.env = v
});
